如何在 access_token 中添加角色声明,目前它在 id_token 中?
Posted
技术标签:
【中文标题】如何在 access_token 中添加角色声明,目前它在 id_token 中?【英文标题】:How to add roles claim in access_token , currently it is coming in id_token? 【发布时间】:2021-02-03 04:19:17 【问题描述】:我正在使用 PKCE 跟踪身份验证代码流,并且我的身份提供程序是 Azure Active Directory。 我从 App Registrations 创建了一个 App,即“client-app”。在清单中,我添加了 appRoles,如下所示。
"appRoles": [
"allowedMemberTypes": [
"User"
],
"displayName": "StoreGroupManager",
"id": "47fbb575-859a-4941-89c9-0f7a6c30beac",
"isEnabled": true,
"description": "Consumer apps have access to the consumer data.",
"value": "StoreGroupManager"
]
我将此角色 StoreGroupManager 分配给用户。现在,当我使用 PKCE 遵循授权代码流并获取 id_token 、刷新令牌和 access_token 时。我可以看到 id_token 有一个声明 roles 但没有 access_token。 我需要在 access_token 中声明角色声明。这可能吗? 以下是解码后的id_token。
【问题讨论】:
【参考方案1】:如果访问令牌所针对的 API 的应用注册定义了这些角色并将它们分配给用户,则角色将包含在访问令牌中。 因此,如果您为客户端和 API 使用相同的应用注册,它们应该在那里。 但是,如果您为客户端和 API 分别注册了应用程序,则需要在两个应用程序中定义角色,并同时在这两个应用程序上为其分配用户。
【讨论】:
我有 2 个应用程序注册了一个用于客户端,另一个用于 API。所以之前我在客户端清单中创建了角色。仅在客户端中分配的用户和角色。现在,当我在 API 应用程序的清单中创建相同的角色集并在 API 的用户列表中分配这些角色时,我可以在访问令牌中看到这些角色。感谢您的帮助。 有没有办法简化为两个应用添加相同用户/组的过程?我的意思是在 2 个地方维护相同的信息可能很乏味。 如果相关用户拥有 Azure AD Premium P2 许可证,您可以使用权利管理访问包:docs.microsoft.com/en-us/azure/active-directory/governance/…以上是关于如何在 access_token 中添加角色声明,目前它在 id_token 中?的主要内容,如果未能解决你的问题,请参考以下文章
我如何将计算字段添加到access_token / id_token
keycloak 无法在 access_token 中获取客户端角色
如何在 ASP.NET Core for JWT 中添加角色策略?