У нас есть сторонний веб-сайт, который хотел бы использовать аутентификацию OAuth или OpenID для аутентификации пользователей с нашей пользовательской базой данных. Мне было поручено реализовать упомянутого провайдера, который я хотел бы сделать в Python, используя Flask, но у меня возникли трудности с переносом головы вокруг фактического рабочего процесса проверки подлинности.Осведомление рабочего процесса OAuth2/OpenID
Все, что мы ищем здесь, является основным механизмом аутентификации. Когда пользователь хочет использовать сторонний сайт, они вводят свое имя пользователя и пароль, и мы сообщим стороннему сайту «да, они авторизованы». Из-за ограничений на стороннем сайте этот обмен должен происходить с использованием OAuth или OpenID - мы не можем сделать что-то простое, например, чтобы они вводили свое имя пользователя и пароль в форме, отправляли его нам и отправляли обратно json объект или что-то, указывающее на успех/неудачу.
Вот мое понимание процесса до сих пор (пожалуйста исправить любые ложные договоренности):
- Пользователь вводит свой OAuth идентификатор пользователя на стороннем сайте (клиент)
- Клиент создает надлежащую OAuth URL на основе идентификатора пользователя и поставщика (us) и отправляет пользователя по этому адресу
- Поставщик отвечает на URL-адрес, указав страницу аутентификации, в которой пользователь вводит свой пароль и проходит проверку подлинности в нашей базе данных.
- Пользователь затем отправляется ba ck на клиентский сайт
Здесь я теряюсь. Как клиент знает, успешно ли аутентифицирован пользователь или нет? Предоставляет ли провайдер что-то в запросе, указывающем это, когда перенаправляет пользователя обратно? Если да, то? Или это что-то еще - возможно, есть дополнительные шаги, которые выполняются, когда пользователь возвращается клиенту?
Моей главной отправной точкой является эта страница: https://flask-oauthlib.readthedocs.io/en/latest/oauth2.html#, в которой много говорится о таких вещах, как модели клиентов и модели маркеров грантов, а также модели маркеров-носителей и т. П. - куда они входят? Учитывая мои основные потребности - я, например, не должен отслеживать какие-либо данные авторизации, просто аутентификацию - могу ли я обойти любые вещи, показанные там?
EDIT: Итак, после некоторого дополнительного копания он выглядит как «Credentials Password Credentials Grant», как описано здесь: https://tools.ietf.org/html/rfc6749#section-4.3 может быть тем, что я собираюсь здесь. Используя этот тип гранта, казалось бы, рабочий процесс:
- пользователя («владелец ресурса», в этом сценарии) вводит свой логин и пароль на странице клиента
- клиент делает запрос на наш URL (что бы мы ни установили), содержащее имя пользователя и пароль в теле запроса (запрос POST), а также поле grant_type «password».
- Я разрешаю пользователю, а затем отвечаю с помощью json-форматированного «токена доступа» или ответа об ошибке.
Этот рабочий процесс звучит достаточно просто (если предположить, что это то, что наша третья сторона продавец имел в виду), а именно то, что я хотел, но оставляет меня до сих пор интересно, что все эти вещи о моделях клиента и нескольких типов лексем, и т.д. является о том, когда смотрите пример кода.