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

Posted

技术标签:

【中文标题】Azure Active Directory 令牌在 JWT 中缺少应用角色【英文标题】:Azure Active Directory tokens missing App Roles in JWT 【发布时间】:2020-01-03 05:46:50 【问题描述】:

我在我的 Active Directory 应用程序注册中注册了两个应用程序,一个客户端和一个 API。通过“公开 API”刀片,客户端应用程序已被 API 应用程序信任。我还向 API 应用程序添加了 4 个应用程序角色(清单中的 IE allowedMemberTypes: ["Application"]),并将它们作为权限添加到客户端应用程序。

当我通过客户端凭据流获取客户端应用程序的 appid 的访问令牌并通过 jwt.io 解码令牌以查看声明时,我可以很好地看到我分配给客户端应用程序的角色,所有这些都在一个漂亮整洁的数组。

但是,使用身份验证流程,并以我自己(属于目录)身份登录,使用相同的机密、范围、客户端 ID 等,应用程序角色在随该流程发回的令牌中丢失,它既不在 id 令牌中,也不在 auth 令牌中。

我在这里缺少什么?是我忘记了一个步骤,还是授权流程不支持应用会员审批?

【问题讨论】:

应用角色只适用于应用......你可以允许用户这样做:allowedMemberTypes: ["Application", "User"] 尝试在allowedMemberTypes 中添加User,如上面的评论所说,然后将您的用户帐户分配给应用角色,在门户中导航到 Azure AD 中的企业应用程序 -> 查找应用对应的服务主体 -> 用户和组 -> 将您的用户帐户添加到您想要的应用角色。 【参考方案1】:

正如official documentation所说:

您可以将应用角色定义为目标用户和/或应用。什么时候 对应用程序可用,应用程序角色显示为应用程序权限 在“必需的权限”边栏选项卡中。

而且,一旦您在应用中添加了应用角色(在 allowedMemberTypes 中添加了“用户”),您就可以在企业应用中assign users and groups to these roles。

如果为一个用户分配了任何角色,您可以在他的 id 令牌中获取角色信息。

【讨论】:

但是有没有办法添加应用角色来访问令牌?

以上是关于Azure Active Directory 令牌在 JWT 中缺少应用角色的主要内容,如果未能解决你的问题,请参考以下文章

保护 Azure Active Directory B2C 访问令牌和刷新令牌

Azure Active Directory,允许的令牌受众似乎没有做任何事情

Azure Active Directory RBAC 不返回承载令牌中的角色

使用 Azure Active Directory 客户端凭据流控制身份验证令牌的到期

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

Azure Active Directory 是不是具有 OAuth/OpenID Connect 令牌自检终结点?