Почему меняется идентификатор реализации Google OpenID? - PullRequest
16 голосов
/ 21 апреля 2010

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

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

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

1 Ответ

19 голосов
/ 21 апреля 2010

Идентификатор OpenID от Google является более или менее хешированным представлением нескольких данных, включая хост, с которого поступил запрос (точнее, параметр 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, вы никогда не сможете изменить свой return_to URL: он также неявно изменит область и идентификаторы URL пользователей вашей учетной записи Google.

...