为什么Google OpenID实施的ID会发生变化?

时间:2010-04-21 16:10:40

标签: openid google-openid

我正在尝试为Web应用程序实现OpenId登录。每当通过OpenId登录的新用户我在sustem上创建一个新用户,并在数据中存储他们的openid URL,以便下次他们使用该用户登录。

我正在使用我的Gmail OpenID对此进行测试,问题是每次我这样做时,Google会发送一个不同的openid网址,即https://www.google.com/accounts/o8/id?id=SomethingThatChangesFromTimeToTime

当然,我当时无法告诉这是否是新用户。我有点疑惑:openid标识符不应该保持不变吗?

1 个答案:

答案 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帐户用户的领域和网址标识符。