【问题标题】:Access Token contains almost all information from Identity TokenAccess Token 包含了几乎所有来自 Identity Token 的信息
【发布时间】:2019-09-03 06:57:51
【问题描述】:

以下令牌是在向 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

【问题讨论】:

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


    【解决方案1】:

    我以google为例,

    1) 假设你想实现social login,你主要需要email、'first_name'、'last_name'等字段。这些字段大多在id_token 中可用。所以id_token 非常适合authentication

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • “ID 令牌用于身份验证。”对于 ROP,我看不到使用了 ID 令牌。但是访问令牌用于吊销端点、自省端点等。一个 Azure B2C,ID 令牌和访问令牌上的受众声明是相同的。您能否请链接您所说的内容,因为我无法理解与在两个段落中都使用 aud(例如客户端应用程序和资源应用程序)。
      • 嗨@Pingpong。 ROPC 流发出一个 ID 令牌,以便客​​户端应用程序可以识别经过身份验证的用户。令牌的重要保护之一是它们必须仅对特定应用程序(即预期的“受众”)和特定范围有效。 aud 声明指定了此预期应用程序。对于 ID 令牌,它设置为客户端应用程序的 client_id;对于访问令牌,它设置为资源应用程序的client_id。在 ROPC 流的情况下,如果令牌请求包含 API scope,则会颁发访问令牌以用于 API 应用程序。
      • 嗨@Pingpong。上面的回答和解释对你有帮助吗?
      • 我们的客户是 PDA 设备,通过 ROPC 对 ID 令牌和访问令牌的最佳受众设置是什么?
      猜你喜欢
      • 1970-01-01
      • 2014-04-20
      • 1970-01-01
      • 2017-10-14
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多