从OpenID 2.0迁移到OAuth 2.0登录(OpenID Connect)

时间:2014-07-07 14:47:22

标签: oauth-2.0 google-plus openid

我们正尝试从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)

遗憾的是,有类似的问题无法解决我的问题。

2 个答案:

答案 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]。