Azure JWT 中的 idTokenClaims 和 idToken 有啥区别?

Posted

技术标签:

【中文标题】Azure JWT 中的 idTokenClaims 和 idToken 有啥区别?【英文标题】:What Is The Difference Between idTokenClaims and idToken In Azure JWT?Azure JWT 中的 idTokenClaims 和 idToken 有什么区别? 【发布时间】:2021-03-30 05:51:17 【问题描述】:

当我使用 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 文档,以及您是否应该使用其中一个。

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

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

【问题讨论】:

这可能会有所帮助:azuread.github.io/microsoft-authentication-library-for-js/ref/… 【参考方案1】:

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

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

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

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

【讨论】:

以上是关于Azure JWT 中的 idTokenClaims 和 idToken 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

从 Azure AD 发出 JWT 令牌中的角色

如何在不使用库的情况下验证本机 Javascript 中的 Azure OAuth 访问 JWT 令牌?

Azure AD 令牌中的哪些 JWT 声明可以安全地用于用户映射?

从 ASP.NET Core 中的 azure B2C 应用程序请求 JWT

Azure B2C - 无法从策略中的 JWT 客户端断言令牌读取“日期”声明

Azure AD B2C 使用 PHP 验证 JWT