我们正尝试从OpenID 2.0迁移到OAuth 2.0登录(OpenID Connect)
我们正在进行google docs OpenID 2.0 (Migration)
我们遇到的问题是ID令牌请求中 openid_id 未返回。
首次身份验证请求:
https://accounts.google.com/o/oauth2/auth?client_id=xxxxxxxxxxxxxxx.apps.googleusercontent.com&response_type=code&scope=openid+email&redirect_uri=http://domain.local/customer/auth-callback&openid.realm=http://domain.local/customer&state=secrettoken
当用户被重定向回来时,我们得到以下参数:
'state' => 'secrettoken',
'code' => 'codeforexchange',
'authuser' => '0',
'num_sessions' => '1',
'session_state' => 'absasd951d57fcc1148f59b6b455ec86045a731c..1de3',
'prompt' => 'none',
然后我们在https://accounts.google.com/o/oauth2/token
上交换一个令牌,我们收到以下内容:
'access_token' => 'accesstoken',
'token_type' => 'Bearer',
'expires_in' => 3594,
'id_token' => 'idtoken'
当我们尝试解析https://www.googleapis.com/oauth2/v1/tokeninfo
上的令牌信息时, openid_id 或者总和不存在,如docs - Step 3: Map OpenID 2.0 identifiers to OpenID Connect identifiers
响应只是(ID令牌):
"issuer": "accounts.google.com",
"issued_to": "xxxxxxxxx-xxxxxxx.apps.googleusercontent.com",
"audience": "xxxxxxxxx-xxxxxxx.apps.googleusercontent.com",
"user_id": "user_id",
"expires_in": 3594,
"issued_at": 1404741485,
"email": "someone@google.com",
"email_verified": true
有谁知道为什么?
注意:这个" domain.local"以前用过OpenId 2.0登录,所以我希望返回openid_id(能够将用户标识符从openid 2.0迁移到OpenidConnect)
遗憾的是,有类似的问题无法解决我的问题。
答案 0 :(得分:4)
获取id_token后,您必须对其进行解码才能找到openid_id。 https://www.googleapis.com/oauth2/v1/tokeninfo不会返回openid_id以响应openid_id是否包含在编码请求数据中。要验证,您可以在此处解码您的id_token; https://developers.google.com/wallet/digital/docs/jwtdecoder
答案 1 :(得分:0)
According to this子包含在ID令牌中。我假设openid_id也在那里。
ID令牌是一个安全令牌,其中包含有关的声明 使用a时授权服务器对最终用户的身份验证 客户以及可能的其他请求的索赔。 ID令牌是 表示为JSON Web令牌(JWT)[JWT]。