Я пытаюсь реализовать вход в систему OpenId для веб-приложения. Каждый раз, когда новый пользователь, который регистрирует на пути OpenId, я создаю нового пользователя на sustem, и среди данных, я храню их, открыл URL, так, чтобы в следующий раз они вошли в систему с тем пользователем.
Я тестирую это со своим Gmail OpenID, и проблема состоит в том, что каждый раз я делаю это, Google отправляет, другое открыло URL, то есть, https://www.google.com/accounts/o8/id? id=SomethingThatChangesFromTimeToTime
Конечно, я затем не в состоянии сказать, является ли это или не новый пользователь. Я немного озадачен: открытый идентификатор не должен всегда оставаться тем же?
Идентификатор OpenID Google представляет собой более или менее хешированное представление нескольких данных, включая хост, с которого пришел запрос (точнее, параметр openid.realm
, отправленный поставщику). Так что, если ваш хост время от времени меняется (например, порт и IP-адрес), то ID тоже будет время от времени меняться. StackOverflow также использует обходной путь для этой проблемы. Проверьте эти сообщения:
Вот выдержка из часто задаваемых вопросов из Google:
Q: В спецификации OpenID указано, что
openid.realm
является необязательным, и если он не указан, Google должен использовать вместо него URLopenid.return_to
. Будет ли это работать?A: Это будет работать в том смысле, что протокол завершится успешно. Но если ваш URL
return_to
выглядит примерно так:www.example.com/authenticate?style=openid-federated_login
, вы просите нас побудить пользователей одобрить и доверять определенному адресу в вашем сайт, который не удобен для пользователей. Кроме того, если вы опустите параметрopenid.realm
, вы никогда не сможете изменить свой URLreturn_to
: это также неявно изменит область и идентификаторы URL пользователей вашей учетной записи Google. .