Выполнение Google Federated Login / oAuth2 после начальной аутентификации

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

  1. support Войдите, используя свою учетную запись 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, чтобы пользователи могли войти на мой сайт?


person M Schenkel    schedule 30.11.2011    source источник
comment
вы хотите, чтобы пользователь автоматически входил в систему, если он выходит из вашего приложения?   -  person Umesh Awasthi    schedule 07.12.2011
comment
Если они выйдут из моего приложения, они нажмут кнопку «Войти с помощью Google», чтобы вернуться в систему. Это затем перенаправит их в Google для аутентификации на моем сайте. Затем они возвращаются на мой сайт и входят в систему.   -  person M Schenkel    schedule 07.12.2011
comment
Теперь я не понимаю, в чем именно заключается ваш вопрос :)   -  person Umesh Awasthi    schedule 07.12.2011
comment
Я отредактировал вопрос, чтобы, надеюсь, он будет иметь больше смысла. Проверить это сейчас.   -  person M Schenkel    schedule 11.12.2011
comment
Если вы выполните шаги 1–5 выше, вы вошли в систему через Google. Если вы затем перейдете к настройкам «Авторизованный доступ ...» в своей учетной записи Google, вы не должны увидеть возможность входа в систему, потому что вы только что вошли в систему, черт возьми ...   -  person Sean M    schedule 13.12.2011
comment
предполагая, что вам, возможно, придется расширить области действия, чтобы включить что-то еще ... какие "области" вы запрашивали? ..   -  person sandeepkunkunuru    schedule 13.12.2011
comment
@SeanM: это не для входа в Google, а для использования входа в Google для аутентификации на моем сайте.   -  person M Schenkel    schedule 15.12.2011
comment
@kunkunur: просто Google Analytics; Я тоже думал об этом. Но, похоже, нет возможности войти в систему с помощью вашей учетной записи Google.   -  person M Schenkel    schedule 15.12.2011
comment
Не могли бы вы пояснить, что вы имеете в виду. Войти, используя свою учетную запись Google? Когда Google перенаправляет пользователя на ваш веб-сайт с его информацией, она вошла на ваш веб-сайт, используя свою учетную запись. Что вы еще ожидаете?   -  person Ali Shakiba    schedule 08.09.2012


Ответы (4)


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

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

person Ryan Shillington    schedule 27.02.2012
comment
В наши дни для входа в систему используется OAuth 2.0. См. developers.google.com/accounts/docs/OAuth2Login. - person Steve Bazyl; 13.07.2012
comment
Да, для входа используется OAuth, но текст «Вход с использованием учетной записи Google» предназначен только для OpenID. Никакая возня с OAuth не приведет к появлению этой кнопки в вашем аккаунте Google. - person Ryan Shillington; 25.07.2012

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

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

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

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

person Ali Shakiba    schedule 08.09.2012

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

person Jeroen Kransen    schedule 29.09.2012

Добавьте этот параметр к https://accounts.google.com/o/oauth2/auth вызову URL: 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

person Anand    schedule 06.12.2012