目前我使用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领域参数)
答案 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。
希望有所帮助!