如何在 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 中获取客户端角色

如何在 access_token JWT 中添加更多数据

如何在 ASP.NET Core for JWT 中添加角色策略?

资源服务器上的 Spring Boot OAuth2 自定义角色

如何在 IAM 角色的信任策略中检查自定义 OpenID 声明?