首页 > 解决方案 > Azure JWT 中的 idTokenClaims 和 idToken 有什么区别?

问题描述

当我使用 Azure AD 进行身份验证时,我得到一个看起来有点像这样的 JWT:

{
  "logout": "ƒ () {}",
  "login": "ƒ () {}",
  "authenticationState": "Authenticated",
  "accountInfo": {
    "account": {
      "idToken": {
        "exp": 1111111111,
        "nbf": 1111111111,
        "ver": "1.0",
        "iss": "https://corp.b2clogin.com/1234-hash-abcd/v2.0/",
        "sub": "1234-abc-123-1234-1234",
        "aud": "1234-abc-123-1234-1234",
        "nonce": "1234-abc-123-1234-1234",
        "iat": 1111111111,
        "auth_time": 1111111111,
        "name": "Joe Bloggs",
        "extension_Role": "Admin",
        "tfp": "B2C_1_signupsignin1"
      },
      "idTokenClaims": {
        "exp": 1111111111,
        "nbf": 1111111111,
        "ver": "1.0",
        "iss": "https://corp.b2clogin.com/1234-hash-abcd/v2.0/",
        "sub": "1234-abc-123-1234-1234",
        "aud": "1234-abc-123-1234-1234",
        "nonce": "1234-abc-123-1234-1234",
        "iat": 1111111111,
        "auth_time": 1111111111,
        "name": "Joe Bloggs",
        "extension_Role": "Admin",
        "tfp": "B2C_1_signupsignin1"
      }
    }
  }
}

如您所见idTokenidTokenClaims它们是相同的。

Azure 发送这两个部分有什么原因吗?

我找不到有关这些部分的任何 Microsoft 文档,以及您是否应该使用其中一个。

我对name和感兴趣extension_Role。有什么理由让我从一个部分取值而不是另一个部分?

就我现在的目的而言,我可以使用其中任何一个。但是,我有兴趣找出这种重复的原因以及推荐使用的解释。

标签: reactjsazure-active-directoryjwt

解决方案


根据我的理解,它们是相同的。

idToken应该是作为字符串的 jwt 令牌。但是在您提供的数据中,由于我们不知道的几个原因,它被解码为 json 声明。

idTokenClaims是从 解码的所有声明(属性)idToken

所以你可以使用它们中的任何一个,但我建议你使用idTokenClaims,因为我不确定idToken下次是否不会被解码(它将是一个 jwt 令牌字符串)。


推荐阅读