Подтвердить что ты не робот

Почему изменился идентификатор реализации OpenID Google?

Я пытаюсь внедрить логин OpenId для веб-приложения. Всякий раз, когда новый пользователь, который входит в систему через OpenId, я создаю нового пользователя в sustem, а среди данных я храню их URL openid, чтобы в следующий раз они вошли в систему с этим пользователем.

Я тестирую это с помощью OpenID Gmail, и проблема в том, что каждый раз, когда я это делаю, Google отправляет другой открытый URL-адрес, то есть https://www.google.com/accounts/o8/id?id=SomethingThatChangesFromTimeToTime

Конечно, я не могу сказать, что это или нет новый пользователь. Я немного озадачен: не должен ли идентификатор openid оставаться неизменным?

4b9b3361

Ответ 1

Идентификатор Google OpenID является более или менее хэшированным представлением нескольких данных, включая хост, из которого пришел запрос (точнее, параметр openid.realm, отправленный поставщику). Поэтому, если ваш хост меняет время от времени (например, изменения порта и ip-адреса), тогда идентификатор также будет меняться время от времени. StackOverflow также использует обходной путь для этой проблемы. Проверьте эти сообщения:

Вот фрагмент часто задаваемых вопросов из google:

В: Спецификация OpenID говорит о том, что openid.realm является необязательным, и если он не указан, Google должен использовать вместо этого URL openid.return_to. Будет ли это работать?

A: Он будет работать в том смысле, что протокол завершится успешно. Но если ваш return_to URL-адрес похож на www.example.com/authenticate?style=openid-federated_login, вы просите нас предложить пользователям одобрить и доверять конкретный адрес вашего сайта, что не является удобным для пользователя. Кроме того, если вы опустите параметр openid.realm, вы никогда не сможете изменить URL-адрес return_to: он также неявно изменит область и идентификаторы URL ваших пользователей учетной записи Google.