Аутентификация с единым входом и авторизация

Я внедряю единый вход Facebook и Google на своем веб-сайте, используя собственный рабочий процесс (URL-адреса перенаправления, синтаксический анализ на стороне сервера и т. Д. - без JavaScript), и я дошел до того, что у меня есть access_token, token_type и expires_in, а из Google также id_token, и я в замешательстве что делать дальше для аутентификации пользователя. Я немного читал об авторизации против аутентификации и о том, что единый вход Facebook и Google - это OAuth2, который обеспечивает авторизацию, но не аутентификацию, из которой я понимаю, что таким образом мое веб-приложение авторизовано на выполнение действий от имени пользователя, но я не могу уверен, что пользователь тот, кто я думаю, что он? My main source is this: OAuth Authorization vs Authentication

So, my question is, what should I do to be able to can consider the user logged in.

Спасибо

2 ответа

Решение

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

Предположим, вы отличаете пользователей по уникальной электронной почте. Ваша заявка должна быть следующей:

  1. Пользователь пытается войти в приложение, используя приложение Google, выполняет все действия по перенаправлению потока Google и выдает токены.
  2. Приложение должно хранить эти токены для будущего использования
  3. Приложение проверяет, представлен ли электронный адрес этого пользователя в базе данных
  4. Если электронная почта предоставлена ​​и Google возвращает токены (Google успешно аутентифицирует вашего пользователя), вы можете войти в систему в своем приложении.
  5. Если электронная почта не представлена ​​в базе данных, но Google аутентифицирует пользователя успешно, вы можете сохранить этого пользователя (с электронной почтой) в своей базе данных - зарегистрируйтесь - это новый пользователь в вашей системе

Тот же поток с Facebook. Конечно, вы можете расширить эту логику, чтобы она была более специфичной для вашего приложения.

SSO и OAuth разные. OAuth - протокол авторизации. Вы имеете дело с Google и Facebook.

OAuth

В случае oauth после успешной аутентификации (google/facebook) вы получите токен доступа. Вы можете использовать токен для поддержки сеанса пользователя.

С этим токеном пользователь авторизован. Теперь вы должны проверить, присутствует ли пользователь в вашей базе данных, если да, то аутентифицируйте пользователя и перенаправьте в ваше приложение.

SSO

SSO - это сервис аутентификации пользователей. Есть способ реализации единого входа, такой как Kerberos SSO, ADFS SSO.

Мы никогда не должны использовать токен доступа OAuth2 для аутентификации. Для получения подробной информации, пожалуйста, обратитесь https://oauth.net/articles/authentication/

OpenIDConnect, построенный поверх OAuth2, может использоваться для аутентификации.

Google поддерживает OpenIDConnect https://developers.google.com/identity/protocols/OpenIDConnect

Основная идея заключается в том, что Google выдаст клиентскому приложению (вашему приложению) идентификационный токен после того, как пользователь войдет в свою учетную запись Google. Затем вы можете извлечь информацию о пользователе (например, электронную почту, уникальный идентификатор пользователя) из этого идентификатора и продолжить процесс входа в систему.

Другие вопросы по тегам