访问令牌包含身份令牌中的几乎所有信息

时间:2019-04-12 13:32:18

标签: oauth-2.0 single-sign-on access-token openid-connect azure-ad-b2c

下面的令牌是在初始令牌请求中通过 Azure AD B2C 返回的。 access_token包含id_token包含的大多数信息。

我的问题是:

1由于access_token包含id_token包含的大多数信息,因此可以使用哪种access_token来代替id_token?在什么情况下必须使用id_token代替access_token

2通常同时使用access_tokenid_token有哪些规则?

初始令牌请求后的结果

{
"access_token": "access_token",
"token_type": "Bearer",
"expires_in": "3600",
"refresh_token": "refresh_token",
"id_token": "id_token"
}

以下是相应令牌的解码令牌:

请注意,access_token包含来自id_token的大多数信息,包括用户信息。

access_token

{
"iss": "url",
"exp": 1550539339,
"nbf": 1550535739,
"aud": "audience ",
"idp": "LocalAccount",
"sub": "guid",
"name": "user@email.com",
"emails": [
"user@email.com"
],
"tfp": "B2C_1_ROPC_Auth",
"ver": "1.0",
"iat": 1550535739,
"azp": "guid"
}

id_token

{
"iss": "url",
"exp": 1550539339,
"nbf": 1550535739,
"aud": "audience ",
"idp": "LocalAccount",
"sub": "guid",
"name": "user@email.com",
"emails": [
"user@email.com"
],
"tfp": "B2C_1_ROPC_Auth",
"ver": "1.0",
"iat": 1550535739,
"auth_time": 1550535739,
"at_hash": "access_token hash"
}

更新

进一步回答上述问题1: 由于access_token包含id_token包含的大多数信息,可以使用access_token代替id_token吗?也就是说,何时必须使用id_token代替access_token

2 个答案:

答案 0 :(得分:0)

我将以google为例,

1)假设您要实现social login,其中您最需要email,'first_name','last_name'之类的字段。这些字段大部分在id_token中可用。因此id_token非常适合authentication

2)以后,您需要获取登录用户的google contacts。在这种情况下,您无法在contacts中获取id_token用户。这就是access_token的来源,尽管您在access_token中没有contacts,但具有所有获取联系人的权限。

答案 1 :(得分:0)

ID令牌用于身份验证。它表示为JSON Web令牌(JWT),其中包含有关身份验证事件的声明,其中包括资源所有者的身份信息。 ID令牌用于客户端应用程序(单页应用程序),其aud(受众群体)声明包含客户端应用程序的OAuth 2.0 client_id

访问令牌旨在供客户端访问资源所有者拥有的资源。它表示为JWT(例如,Azure AD B2C将访问令牌表示为JWT)或不透明令牌。该访问令牌用于资源应用程序(例如API应用程序),其aud声明中包含该资源应用程序的OAuth 2.0 client_id