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

Posted

技术标签:

【中文标题】从 Azure AD 发出 JWT 令牌中的角色【英文标题】:Emiting Roles in JWT Token from Azure AD 【发布时间】:2021-04-10 09:16:39 【问题描述】:

我正在尝试使用以下说明在 Angular 应用程序中发出角色。

https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-angular

我成功验证了用户,从帐户声明中获取了一般角色,还能够静默检索 JWT 令牌,一切都使用 MSAL 服务。

但是,试图在 JWT Token 中实现相同的目标。默默地累积令牌,但它缺少角色。只是想知道,如果有人可以帮助我,如何在 Azure AD 中配置它。

在 Angular 中,我有这段代码,它给了我 JWT 令牌。解码时..我没有看到其中的应用程序角色。

const requestObj = 
  scopes: ['user.read'],
;

this.authService.acquireTokenSilent(requestObj).then(function (tokenResponse) 
    // Callback code here
    console.log(tokenResponse.accessToken);
  )
  .catch(function (error) 
    console.log(error);
  );

【问题讨论】:

您是指 Azure AD 目录角色吗?那些不包含在token中或者如果您提到的角色是指应用程序角色,答案是肯定的,您可以在id_token中获取角色信息。请参考这个question可能对你有帮助 感谢 Sruthi 提供的信息。我遵循了所有步骤,并且在 id_token 中获得了角色。当您静默调用 accrue 令牌时,我需要在 JWT 令牌中发出相同的内容。那里没有显示应用程序角色 【参考方案1】:

请检查你是否给用户分配了角色,你可以参考这个tutorial。

该角色不会显示在访问令牌中。它只会显示在 id 令牌中。您可以使用 authorization code grant 或 openID connect 之类的流程来登录用户。响应将包含一个 id_token。

这里有另一个post,和这个问题类似,供大家参考。

【讨论】:

【参考方案2】:

应用角色在您的客户端应用中定义,在这种情况下,应用角色将包含在id token中。

如果您想在access token 中获取应用角色,您需要在您的API 的Azure AD 应用 中定义角色。而且它只支持调用你自己的API,不支持MS Graph API。

您在客户端应用程序中定义了角色,并根据您提到的example 调用了 Microsoft Graph API。所以应用角色在 id 令牌中,但不在访问令牌中。

更多信息,请参见类似的issue。

【讨论】:

以上是关于从 Azure AD 发出 JWT 令牌中的角色的主要内容,如果未能解决你的问题,请参考以下文章

通过 Azure AD 验证不透明的访问令牌

避免 Azure AD 颁发的 JWT 令牌中的个人信息

仅验证从 Azure B2C AD 生成的 JWT 令牌的签名 [重复]

.net 核心 2.2 Azure Ad Jwt 令牌

使用 JWT 令牌保护 asp.net 核心 Web api 时如何从 Azure AD 获取用户

Azure Active Directory 令牌在 JWT 中缺少应用角色