Login openid.u id是静态的吗?

Login openid.u id是静态的吗?,login,openid,account,Login,Openid,Account,我正在阅读关于如何让用户使用他们的Google帐户登录到web应用程序的文章 因此,在这个过程的最后,Google返回一个Google提供的标识符,该标识符被附加为openid.claided\u id。这意味着web应用程序使用此标识符来识别用户并允许访问应用程序功能和数据。我的问题是,这个标识符是静态的吗?我可以使用此标识符重复标识同一用户吗?是。将OpenID.CalEdEd ID值视为用户名。特别是对于谷歌,但是对于任何真正实现“定向身份”的OpenID提供商来说,这是正确的,不要认为这

我正在阅读关于如何让用户使用他们的Google帐户登录到web应用程序的文章


因此,在这个过程的最后,Google返回一个Google提供的标识符,该标识符被附加为
openid.claided\u id
。这意味着web应用程序使用此标识符来识别用户并允许访问应用程序功能和数据。我的问题是,这个标识符是静态的吗?我可以使用此标识符重复标识同一用户吗?

是。将OpenID.CalEdEd ID值视为用户名。特别是对于谷歌,但是对于任何真正实现“定向身份”的OpenID提供商来说,这是正确的,不要认为这个用户名与其他网站是相关的。根据设计,除了您自己的网站之外,任何其他依赖方将为同一谷歌用户获得不同的声明id值


此外,请确保将此声明的id视为。

您的问题的具体答案可在以下内容中找到:

谷歌提供的标识符与用户的实际谷歌账户名或密码没有任何联系,是一个持久值;即使用户更改了他们的谷歌用户名和/或电子邮件地址,它也保持不变。该标识符也是一个“定向标识”,即谷歌向每个依赖方返回不同的值。Google使用请求参数openid.realm来识别依赖方,因此如果第三方应用程序决定更改此值,则所有用户标识符都将更改


事实上,我刚刚遇到一个例子,谷歌声称我的测试用户的id已经改变了。我即将结束在我的应用程序中实现OpenID的工作,并且没有明显的原因,响应数据中声明的\u id已经更改

在过去的几周里,我一直在用这个账户进行测试,正如预期的那样,声称的_id在整个过程中都是相同的。然后砰,变了!我多次查看响应数据以进行验证,用于检索数据的底层代码没有更改

我现在不知道该如何处理,但我想这会让我陷入困境。初始身份验证后,用户注册到站点(正如您所期望的)并设置一个屏幕名称。如果声明的id已更改,我们如何验证它是同一个用户?根据最佳实践,我们当然不能使用电子邮件地址

编辑

现在我脸上有馅饼了!我漏掉了一个小细节,那是一个重要的细节。我更改了我的开发环境,并在不同的v主机上托管。这将有效地改变领域,并将根据文档更改声明的\u id响应

这对我来说是一个很好的教训,因为我即将在一个子域上实现OID,在这个子域中,领域将在代码中自动设置。现在我省去了路上的麻烦,因为我不可能在不破坏身份的情况下跨所有其他子域使用相同的用户数据库

更多信息

作为旁注,即使您正在为您的子域之一开发OpenID解决方案,您也应该谨慎地为顶级域指定领域

e、 例如,openid.realm=http://*.yourdomain.com

它将允许您在所有子域中扩展登录页面,并在其中保留用户身份

(可选)已验证的领域。标识要终止的域 正在要求用户信任。(示例:“http://*.myexamplesite.com”) 此值必须与中定义的域一致 openid.return\u to。如果未定义此参数,Google将使用 openid.return\u to中引用的URL


最后一句话我怎么强调都不过分。“如果第三方应用程序决定更改此值,则所有用户标识符都将更改。”这是谷歌实现的一个特殊功能。所以除了那个细节,是的,声明的id是静态的……顺便说一句,我在声明的id更改的同时,在这个特定的gmail帐户中添加了一个日历。我不太确定时间,因为我直到36小时后才拿到新的身份证。不确定这是否与此有关,但人们希望不会。我真的希望这一切我都错了,我只是错过了一些东西-如果我错了,我一定会发回!