从 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 B2C AD 生成的 JWT 令牌的签名 [重复]