16

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

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

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

4

1 回答 1

19

Google 的 OpenID 标识符或多或少是多个数据的散列表示,包括请求来自的主机(更准确地说是openid.realm发送给提供者的参数)。因此,如果您的主机不时更改(例如端口和 IP 地址更改),那么 ID 也会不时更改。StackOverflow 也为此问题使用了解决方法。检查这些帖子:

这是谷歌的常见问题解答摘录:

问:OpenID 规范说这openid.realm是可选的,如果没有提供,Google 应该使用openid.return_toURL。那会奏效吗?

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

于 2010-04-21T16:21:47.933 回答