我正在尝试为 Web 应用程序实现 OpenId 登录。每当新用户通过 OpenId 登录时,我都会在系统上创建一个新用户,并在数据中存储他们的 openid URL,以便下次他们使用该用户登录时。
我正在使用 Gmail OpenID 对此进行测试,问题是每次我执行此操作时,Google 都会发送不同的 openid URL,即https://www.google.com/accounts/o8/id?id=SomethingThatChangesFromTimeToTime https://www.google.com/accounts/o8/id?id=SomethingThatChangesFromTimeToTime
当然,我无法判断这是否是新用户。我有点困惑:openid 标识符不应该始终保持不变吗?
Google 的 OpenID 标识符或多或少是多个数据的哈希表示,包括请求来自的主机(更准确地说是openid.realm
发送给提供者的参数)。因此,如果您的主机不时发生变化(例如端口和IP地址发生变化),那么ID也会不时发生变化。 StackOverflow 也使用了解决此问题的方法。检查这些帖子:
- OpenID,一年后 https://blog.stackoverflow.com/2010/04/openid-one-year-later/
- Google 的 OpenID 每个域都是唯一的 https://blog.stackoverflow.com/2009/04/googles-openids-are-unique-per-domain/
以下是谷歌常见问题解答摘录:
问:OpenID 规范指出openid.realm
是可选的,如果未提供,Google 应使用openid.return_to
改为网址。那行得通吗?
答:它会起作用,因为协议将成功完成。但如果你的return_to
网址是这样的www.example.com/authenticate?style=openid-federated_login
,您要求我们提示用户批准并信任您网站上的特定地址,这对用户不友好。另外,如果您省略openid.realm
参数,您将永远无法更改您的return_to
URL:它还会隐式更改您的 Google 帐户用户的领域和 URL 标识符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)