Выполнение Google Federated Login / oAuth2 после начальной аутентификации - PullRequest
14 голосов
/ 01 декабря 2011

Я пытаюсь поддерживать «гибридный» федеративный вход и oAuth2 (используя логику из этого документа ) для веб-службы, которая будет:

  1. поддержка Войдите, используя свою учетную запись Google на моем сайте. То есть из документации: Вы также можете использовать систему аутентификации Google в качестве способа аутсорсинга аутентификации пользователя для вашего приложения. Это может устранить необходимость создавать, поддерживать и защищать хранилище имени пользователя и пароля .
  2. Доступ к Google Analytics пользователя.

Вот шаги, которые я сделал.

  1. Я формирую запрос на https://accounts.google.com/o/oauth2/auth с областями (Google Analytics), к которым я хочу получить доступ.
  2. Меня перенаправляют в Google, где у меня есть иконка и к каким областям я запрашиваю доступ. Я даю доступ.
  3. Я перенаправлен обратно на страницу обратного вызова.
  4. Я получаю токены (доступ и обновление), а также огромную строку id_token (которую я не знаю) и сохраняю всю эту информацию в своей базе данных.
  5. Затем я позвоню по номеру https://www.googleapis.com/oauth2/v1/userinfo?access_token=xxxyyyzzz, чтобы получить адрес электронной почты и имя пользователя, а также сохранить эту информацию в моей базе данных. Я также заметил, что он возвращает поле id , которое, насколько мне известно, никогда не меняется, и я предполагаю, что это какой-то уникальный идентификатор. Я тоже храню это.

Вопрос: Если я захожу в раздел Авторизованный доступ к вашей учетной записи Google в моей учетной записи Google, это означает, что у моего сайта есть доступ к "Google Analytics. НО, он не говорит Войти используя вашу учетную запись Google . Это то, что я пытаюсь выполнить. Я бы подумал, что использование логики включит Вход с использованием вашей учетной записи Google . Что я делаю не так? И что будет применимый вызов в Google, чтобы пользователи могли войти на мой сайт?

Ответы [ 4 ]

1 голос
/ 27 февраля 2012

Если ваш сайт имеет доступ к чему-либо, например, к вашим контактам или аналитике, с помощью OAuth, вы никогда не увидите «Войти, используя свою учетную запись Google». Я уверен, что только если вы используете OpenID (не OAuth) только для входа.

В частности, OAuth используется для предоставления вам доступа к API для создания / обновления / удаления данных, а OpenID - для входа в систему.

0 голосов
/ 06 декабря 2012

Добавьте этот параметр в URL-вызов https://accounts.google.com/o/oauth2/auth: approval_prompt=force, а затем Вход с использованием вашей учетной записи Google всегда будет отображаться независимо от того, был ли пользователь уже зарегистрирован в этой или любой другой учетной записи.

Так что вызов будет таким: https://accounts.google.com/o/oauth2/auth?client_id=<client id>&redirect_uri=<uri>&scope=<scope>&access_type=<online or offline>&response_type=code&approval_prompt=force

0 голосов
/ 29 сентября 2012

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

0 голосов
/ 08 сентября 2012

Если вы спрашиваете, как идентифицировать пользователя для будущих входов в систему, у вас есть два варианта:

  • Смешайте OAuth с OpenID, который называется Hybrid. Я описал это в этом ответе .

  • Использовать область действия userinfo и запрашивать userinfo (email и т. Д.) После успешной авторизации OAuth. Это описано в документации Google OAuth 2 .

Если вы имеете в виду автоматический вход на свой веб-сайт в будущих посещениях, вы можете использовать OpenID «немедленный режим» (параметр openid.mode).

...