2017-02-03 2 views
0

У нас есть сторонний веб-сайт, который хотел бы использовать аутентификацию 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-форматированного «токена доступа» или ответа об ошибке.

Этот рабочий процесс звучит достаточно просто (если предположить, что это то, что наша третья сторона продавец имел в виду), а именно то, что я хотел, но оставляет меня до сих пор интересно, что все эти вещи о моделях клиента и нескольких типов лексем, и т.д. является о том, когда смотрите пример кода.

ответ

-1

Мы используем OAuth для аутентификации.Пожалуйста, прочитайте его здесь On a high level, how does OAuth 2 work?

Возвращаясь к вашему сценарию, я думаю, что сторонний сайт работает на сервере, который проверяет подлинность пользователя или нет. Проще говоря, если вы входите в gmail и открываете новую вкладку в том же браузере и получаете доступ к gmail.com, вам не нужно снова входить в систему, gmail открывает ваш почтовый ящик напрямую. Что здесь происходит? Файлы cookie сеанса/токены в cookie браузера проверяются, а затем почтовый ящик gmail напрямую открывается. Вы можете проверить перенаправление acivity на вкладке «Сеть» на вкладке «Сеть» в окне «Консоль», когда вы снова открываете страницу gmail.com)

Аналогичным образом подумайте, что ваш сторонний сайт как gmail.com, и он будет проверять, зарегистрирован ли пользователь или нет. Вам не нужно поддерживать какую-либо пользовательскую базу данных для проверки пользователя. Oauth позаботится о регистрации, а затем отправит пользователя по правому URL-адресу на основе запроса.