Access Token包含来自Identity Token的几乎所有信息

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (219)

使用Azure AD B2C初始token请求时,将返回以下token,access_token包含大多数id_token包含的信息。

问题是:

1 由于access_token包含id_token包含的大多数信息,什么时候access_token可以代替id_token?什么时候必须使用id_token而不是access_token

2 access_tokenid_token的使用规则是什么?

初始token请求时的结果

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

以下是相应token的已解码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

提问于
用户回答回答于

以谷歌为例,

1)假设你想要实现social login,你最需要的字段像email,'first_name','last_name'。,这些字段大多数储存在id_token。所以id_token非常适合身份认证

2)以后你需要获取登录用户的谷歌联系人,这种情况下你无法在id_token获得,这就是access_token的作用,虽然你不会获得用户的联系人,但可以有获取联系人的权限。

用户回答回答于

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

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

扫码关注云+社区

领取腾讯云代金券