我正在尝试为Web应用程序实现OpenId登录。每当通过OpenId登录的新用户我在sustem上创建一个新用户,并在数据中存储他们的openid URL,以便下次他们使用该用户登录。
我正在使用我的Gmail OpenID对此进行测试,问题是每次我这样做时,Google会发送一个不同的openid网址,即https://www.google.com/accounts/o8/id?id=SomethingThatChangesFromTimeToTime
当然,我当时无法告诉这是否是新用户。我有点疑惑:openid标识符不应该保持不变吗?
答案 0 :(得分:19)
Google的OpenID标识符或多或少是多个数据的哈希表示,包括请求来自的主机(更确切地说是发送给提供商的openid.realm
参数)。因此,如果您的主机不时更改(如端口和IP地址更改),则ID也会不时更改。 StackOverflow也为此问题使用了解决方法。查看这些帖子:
以下是谷歌的常见问题摘录:
问:OpenID规范说
openid.realm
是可选的,如果没有提供,Google应该使用openid.return_to
网址。那会有用吗?答:它将在协议成功完成的意义上起作用。但是,如果您的
return_to
网址类似于www.example.com/authenticate?style=openid-federated_login
,则您要求我们提示用户批准并信任您网站上的特定地址,这不是用户友好的。此外,如果您省略openid.realm
参数,则无法更改return_to
网址:它还会隐式更改您的Google帐户用户的领域和网址标识符。