8

Мы разрабатываем приложение Javascript для всей клиентской базы SPA и должны аутентифицировать наших пользователей, чтобы получить доступ к внутренним.Войти на одну страницу Приложение с аутентификацией Google и Google Oauth 2.0

Как я нашел из поиска, мы можем передать на аутсорсинг наш механизм аутентификации и использовать для этого учетные записи Google. Я узнал из этого сайта https://developers.google.com/accounts/docs/OAuth2Login - Как бороться с API Google и механизмом аутентификации.

В коротком слове, нам нужно:

  • запрос отправить Google URL с Params попросить пользователя, чтобы позволить SPA использовать свои персональные данные
  • в случае успеха мы получаем токен от Google
  • , мы можем использовать этот токен, чтобы получить доступ к API, с которым нас попросили, и работать с ним.

Это хорошо описано, и я понимаю, что у меня есть код JS, чтобы это произошло.

То, что я не понимаю.

У меня есть приложение с его личными данными. Я хочу использовать электронную почту пользователя в качестве логина или идентификатора пользователя (не имеет значения, как его называть) для доступа к внутренним элементам приложения, таким как созданные пользователем задачи, профиль пользователя и т. Д. Таким образом, для отображения созданных пользователем задач в моем SPA Мне нужна база запросов с электронной почтой пользователя.

я представляю себе следующий сценарий:

  • пользователь нажмите Login with Google кнопку
  • получаем маркер - это означает, что пользователь прошел проверку подлинности успешно
  • мы упорствовать пользователя и его электронную почту для работы с SPA
  • , когда пользователь нажмет Logout мы очищаем все данные доступа

Где я должен хранить эти данные?

В случае Forms Authentication Я понимаю, что мы передаем логин/пароль к серверу, и если они совпадают с базой данных мы создаем Forms Ticket и хранить его в печенье.

Есть ли аналогичный случай с авторизацией Google? Если я буду хранить электронную почту пользователя в cookie, я думаю, что это не очень хорошо из соображений безопасности. Если я сохраню токен - я не уверен, зачем мне это нужно и как его использовать в моем SPA, я не использую API Google после проверки подлинности.

У вас есть пример с примером, как мы можем построить наш процесс в подобных случаях?

спасибо.

+0

FYI идентификатор пользователя и адрес электронной почты пользователя отличаются одним важным способом; пользователь может изменить свой адрес электронной почты, и идентификатор останется таким же для этого пользователя. –

+0

В этом конкретном случае мы не будем изменять электронные письма внутри корпоративной сети. В общем, я попытался объяснить, что я буду использовать либо первый, либо второй, но это не имеет значения с точки зрения того, что я должен делать дальше. Если ID - нормально, давайте сохраним идентификатор пользователя в базе данных и запросим его по id, если электронная почта - все в порядке. Кстати, как я могу изменить электронную почту в Google? Возможно ли это? –

+1

http://support.google.com/accounts/bin/answer.py?hl=ru&answer=19870 –

ответ

5

Если вам нужен только электронный адрес пользователя, вам будет лучше использовать OpenID вместо OAuth. OAuth предоставляет доступ к учетной записи пользователя и услугам, привязанным к определенному ресурсу или набору ресурсов. OpendID предназначен только для входа в стороннюю службу. Затем вы можете извлечь идентификатор пользователя и адрес электронной почты из входа OpenID. Примечание. Идентификатор всегда будет отправлен, но адрес электронной почты должен быть явно запрошен во время аутентификации.

Google также поддерживает гибридную схему OpenID + OAuth, которая позволяет отправлять запросы OAuth поверх входа в OpenID, если есть какой-то ресурс, для которого требуется аутентификация. Take a look at the authentication document to get an idea of how both protocols work and which is better for your scenario.

Как только у вас есть адрес электронной почты, вы, вероятно, не должны сохраняться в cookie. Обычно рекомендуется использовать его как параметр сеанса. Таким образом, на клиенте хранится только файл cookie сеанса, и сервер может использовать его, чтобы найти нужные ему значения. This answer has a good explanation of the differences and when you want to use sessions versus cookies.