我正在使用 Azure AD B2C,并且我有一个关于在 JWT 令牌中包含“角色”声明以用于授权目的的要求。我的目标是根据应用程序中的用户角色分配不同的访问级别和权限。
预期结果:
我希望 Azure AD B2C 能够为 JWT 令牌中的“角色”声明提供本机支持,使我能够在授权期间轻松管理和验证用户角色。
实际结果:
但是,我对此主题的研究尚未得出有关 Azure AD B2C 是否支持“角色”声明的明确信息。 Microsoft 官方文档没有提供专门解决这方面问题的最新信息。
我尝试过的:
我彻底搜索了各种资源,包括 SO、Microsoft 文档和开发人员论坛,以查找有关此问题的任何更新或见解。但是,我找不到明确说明 Azure AD B2C 是否支持 JWT 令牌中的“角色”声明或提供任何推荐方法来处理用户角色的具体信息。
为什么它不能满足我的需求:
缺乏具体信息使我很难使用 Azure AD B2C 实现基于角色的授权。由于不清楚 Azure AD B2C 是否支持“角色”声明,我不确定实现所需功能的最佳方法。
Azure AD B2C 是否支持 JWT 令牌中的“角色”声明,或者是否有其他方法或解决方法可以在 Azure AD B2C 中实现基于角色的授权?
并不是说 B2C 不支持
roles
声明,而是它不支持 B2C 租户内的管理角色(某种程度上)。
您始终可以拥有角色的外部存储,或在 B2C 的 AAD 目录中分配的角色,然后使用 API/Graph API 检索这些角色并填充
roles
声明,作为 B2C 旅程的一部分。但是,您将需要在 B2C 之外实现和托管该 API。
如果您使用自定义策略和本地帐户(即存储在 B2C 目录中的电子邮件和密码),您可以采取另一种方法,但它没有记录,也不受官方支持。
本地帐户在自定义策略中的工作方式是 B2C 对底层 AAD 进行 ROPC 调用,为 IdentityExperienceFramework 应用程序请求令牌。该 ROPC 调用可以返回角色,并且这些角色可以映射到 B2C 中的
roles
声明,并作为用户 id_token
和 access_token
的一部分返回给依赖方。
要实现这一目标,您需要更新 IdentityExperienceFramework 应用程序的清单以公开用户角色(这些将是分配给单个用户的角色)。然后,您需要将用户分配给该应用程序,为他们提供其中一种角色。最后,您需要将角色声明作为输出声明添加到 ROPC 调用、进行 ROPC 调用的自断言页面以及依赖方定义。
假设我正确理解了您的问题,简短的回答是:不,截至目前,Azure Active Directory B2C 不支持自定义应用程序的“角色”声明中的角色。 至少 Azure AD B2C 的官方文档没有描述此功能。欲了解更多信息,请参阅这篇文章。
但是,根据您的使用案例,您可以使用常规的 Azure Active Directory。常规版本允许您在应用程序中创建自定义角色,这些角色在访问令牌的“角色”声明中发送。遗憾的是,这仅允许您的用户通过其 Microsoft 帐户之一(工作、学校或个人)登录。请参阅文档了解这一点。因此,它不提供例如通过 Azure AD B2C 等其他提供商进行社交登录。
如果您可以选择使用 Azure AD,请参阅本文,了解向 Azure AD 应用程序添加角色的信息。
假设我正确理解你的问题,AD B2C 不支持“角色”或“访问权限”声明。
但是,有一种方法可以使用自定义属性和 API 连接器来实现此目的。在这种情况下,您需要在 B2C 之外维护您的角色访问控制,并在使用 B2C 登录时将其添加为声明。
例如,您有一个包含所有角色和访问凭据的数据库表。您创建一个可以获取该数据的 REST API。使用 API 连接器将该 API 添加到 B2C 登录用户流程。您声明将被添加到签名令牌中。