当openid2.0登录google-plus登录时谷歌openid不同?

时间:2015-03-24 09:39:12

标签: google-plus openid google-oauth google-openid

目前我使用OpenID2.0使用google登录用户,并将用户的openID存储在用户模型的db表中。

升级到google-plus登录后,我显然需要匹配现有用户,因此系统不会提示他们注册,而是登录。

我想通过openid匹配它们,正如谷歌建议在迁移指南中做的那样。

为此,我在google-plus登录期间传递openid领域参数,从谷歌抓取id_token,解码它以获取用户的openid,然后检查我的数据库中的现有用户OpenID的。如果它们存在,那么它们可以登录,如果没有,那么该网站假定它们是新用户......

问题是当我用现有用户测试时,google-plus登录流程中我从google获取的openid似乎与我存储在数据库中的旧openid不同(我从openID2获取并存储) .0 signin flow)为同一个用户

为什么openid在这两个流程中有所不同?

(我每次都传递相同的openid领域参数)

1 个答案:

答案 0 :(得分:3)

通过step 3 of Google's migration documentation获得的openid_id值应该与您在OpenID2实现中获得的OpenID标识符值相匹配。

如果不是这种情况,最可能的原因是您在OpenID Connect授权请求中使用了不同的openid.realm值。

构建OpenID Connect身份验证请求时,请确保使用与OpenID 2.0请求中使用的相同的openid.realm值(根据step 1.3 of Google's migration documentation)。请注意,OpenID 2.0标识符为directed,即用户在不同的中继方(RP)之间具有不同的标识符,因为OpenID 2.0不提供注册过程,openid.realm值用于标识RP。

希望有所帮助!