为什么谷歌';什么是OpenID实现更改?

为什么谷歌';什么是OpenID实现更改?,openid,google-openid,Openid,Google Openid,我正在尝试为web应用程序实现OpenId登录。每当新用户通过OpenId登录时,我都会在sustem上创建一个新用户,并在这些数据中存储他们的OpenId URL,以便下次他们使用该用户登录 我正在用我的Gmail OpenID测试,问题是每次我这么做,谷歌都会发送一个不同的OpenID URL,也就是 当然,我无法判断这是不是一个新用户。我有点困惑:openid标识符不应该一直保持不变吗?谷歌的openid标识符或多或少是多个数据的哈希表示,包括请求来自的主机(更确切地说是发送给提供者的op

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

我正在用我的Gmail OpenID测试,问题是每次我这么做,谷歌都会发送一个不同的OpenID URL,也就是


当然,我无法判断这是不是一个新用户。我有点困惑:openid标识符不应该一直保持不变吗?

谷歌的openid标识符或多或少是多个数据的哈希表示,包括请求来自的主机(更确切地说是发送给提供者的
openid.realm
参数)。因此,如果您的主机不时更改(如端口和ip地址更改),则ID也会不时更改。StackOverflow也为此问题使用了一种解决方法。查看这些帖子:

以下是谷歌的常见问题摘录:

问:OpenID规范说,
OpenID.realm
是可选的,如果没有提供,谷歌应该使用
OpenID.return\u到
URL。这样行吗

答:从协议将成功完成的意义上讲,它将起作用。但是,如果您的
返回到
URL类似于
www.example.com/authenticate?style=openid-federated\u login
,则您要求我们提示用户批准并信任您站点上的特定地址,这对用户来说并不友好。此外,如果省略
openid.realm
参数,您将永远无法将
return\u更改为
URL:它还将隐式更改您的Google帐户用户的领域和URL标识符


尝试使用更多的问号和感叹号!?!?我通常不这么做,但我真的对这种行为感到困惑。我原以为OpenId的优点是有一个唯一的URL来标识您自己,而不是依赖于每次都为您分配一个URL的提供商。即使我也有同样的问题,但进一步挖掘后,我发现,在我的情况下,发送身份验证请求的域是相同的字符串,但在不同的浏览器中给出不同的值。我在FF和chrome中进行了测试。不确定我在这里遗漏了什么。这已经被谷歌修复了吗?这违背了openID的初衷。我不明白这背后的道理。我只是从同一台(本地)主机进行两次身份验证,一个距离另一个主机几秒钟。所以我想没有什么变化;但是我获得了不同的身份(openid.identity)。记录你的应用程序和谷歌之间的通信。主要的oid框架支持这一点。检查两个查询的请求是否相同。SztupY:“包括请求来自的主机”严格来说不是真的。这里的变量是openid.realm参数,它与请求来自何处无关,而是与响应将发送到何处有关(这可能是非常不同的事情,但通常是相同的事情)。