Разработка: перенос Google Open ID на Google OAuth

Кто-нибудь знает, как это сделать? В основном я пытаюсь заменить стратегию «Подключиться к Google» с OpenID на OAuth. Задача состоит в том, чтобы идентифицировать старого пользователя (пользователя открытого идентификатора Google), когда пользователь входит в систему по новой схеме OAuth.

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

Итак, у меня есть открытые идентификаторы, такие как https://www.google.com/accounts/o8/id?id=AfSCwGQ4PUaidXSQddJugXKLqU5V0MrXFhJM6UHybPw и пытаюсь понять, могу ли я получить от этого Google ID.

ОБНОВЛЕНИЕ: я объяснил здесь, как я закончил эту миграцию - http://softwareas.com/migrating-user-accounts-from-google-openid-to-google-oauth-to-google-plus


person mahemoff    schedule 19.12.2012    source источник
comment
Возможно, вам поможет эта ссылка и ответ Уилла Норриса. Если вам удастся заставить его работать, было бы здорово, если бы вы позже разместили здесь свое решение. Я был бы очень признателен.   -  person Ashitaka    schedule 20.12.2012


Ответы (2)


Google использует направленные идентификаторы для OpenID, которые уникальны для каждой проверяющей стороны и явно предназначены для сокрытия любого коррелируемого идентификатора для пользователя. Итак, краткий ответ: нет способа получить идентификатор Google, соответствующий данному Google OpenID.

Однако одним из вариантов может быть использование процесса Google OpenID+OAuth Hybrid. Это позволяет вам получить токен OAuth как часть обычного потока OpenID, который затем можно использовать для получения идентификатора пользователя из OAuth2 Login API, который затем можно связать с существующей учетной записью. После того, как вы сделали это для всех существующих пользователей, переключитесь на прямое использование входа OAuth2.

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

person Will Norris    schedule 19.12.2012
comment
Спасибо за этот подробный ответ. Проблема здесь в том, что я хочу показать единый Connect With Google для всех (новых и существующих), поэтому поток OpenID + OAuth не будет тем, что я хочу, чтобы проходили новые пользователи. К счастью, пока не так много пользователей подключились через Google Open ID, поэтому я, вероятно, просто создам для них пользовательский процесс миграции и отправлю им ссылку на него. - person mahemoff; 20.12.2012

На сегодняшний день у нас нет готовой стратегии, которая не позволит пользователю увидеть еще одну страницу утверждения.

Однако вместо того, чтобы пытаться создать гибридный поток на основе OAuth1 и добавлять весь этот устаревший код на свой сервер, я предлагаю вам просто сопоставить адрес электронной почты и перейти к входу в систему OAuth2. Я предполагаю, что вы похожи на большинство сайтов, которые в конечном итоге запрашивают адрес электронной почты, потому что они обычно хотят его для восстановления учетной записи. Просто убедитесь, что вы получили адрес электронной почты от OpenId в качестве одного из подписанных параметров.

Затем используйте область userinfo.email и OAuth2 https://developers.google.com/accounts/docs/OAuth2Login, и вы сможете выполнить миграцию с меньшими трудностями для разработчиков.

Кроме того, мы находимся в процессе добавления поддержки OpenIDConnect, и он поддерживает параметр login_hint, поэтому вы должны добавить [email protected] к URL-адресу авторизации, и он направит утверждение на нужную учетную запись. Сейчас это не задокументировано, но вам может быть полезно попробовать. Браузер пользователя может войти в Google с несколькими учетными записями, и вы хотите попытаться получить правильную. Всегда проверяйте электронное письмо, которое вы получаете от потока OAuth2, чтобы убедиться, что оно совпадает, поскольку это всего лишь «подсказка».

Пользователям по-прежнему придется повторно авторизоваться для OAuth2, но мы планируем пропустить эту повторную авторизацию в будущем. Главное — спланировать использование OAuth2, и мы надеемся, что в скором времени будет обеспечена плавная миграция, и вы перейдете на поддерживаемый протокол.

person Community    schedule 20.12.2012
comment
Спасибо, Дэвид. Я могу сделать эту работу, попросив электронную почту, но я пытался не просить об этом. - person mahemoff; 21.12.2012
comment
Однако это опасно, поскольку позволяет пользователю создать учетную запись Google под адресом электронной почты предыдущего пользователя, а затем войти в систему. - person Doug; 26.02.2015