在 Azure AD B2C 中发布自定义声明(例如用户订阅或角色列表)之前,有哪些方法可以将其包含在令牌中,前提是声明存储在自己的服务器上的某个位置(在 B2C 中不可用)? 目标是在令牌中拥有声明,以避免每次请求时额外往返存储。
对该主题的调查使我得出以下方法:
通过 Graph API 添加自定义属性,配置为包含在 JWT 中。属性值应与我们的数据存储保持同步。
如本文中所示的自定义登录策略https://learn.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-rest-api-step-custom但是如果我猜对了,额外的第 6 步是用户以非限制方式访问公开可用的 API 的旅程(请求不受秘密保护,可能用于通过提供的 UserId 获取用户声明)?
IdentityServer4 联合网关 http://docs.identityserver.io/en/release/topics/federation_gateway.html 允许在发布之前添加任何声明。
您概述的前两种机制是在 Azure AD B2C 颁发的令牌中包含自定义声明的最常见和推荐的方法:
添加自定义属性并将其包含在JWT中。您可以通过 B2C UI 或 Graph API 启用自定义属性。您需要构建自己的机制来保持 B2C 中此属性的值与您的外部源同步通过 Graph API。 您可以使用自定义策略
在身份验证流程中添加一个步骤来调用Rest API来获取声明并将其包含在令牌中将是要使用的 API 连接器类型。
在用户旅程中添加编排步骤,以调用 Rest API 来获取声明并将其包含在令牌中。
有关如何实现此功能的更新文档可在自定义策略的 API 连接器文档中找到。
两者都可用
添加一个 自定义属性 并将其包含在 JWT 中
。您可以添加自定义属性通过图形 API。 您需要构建自己的机制来保持 B2C 中此属性的值与您的外部源同步通过 Graph API。 注意:通过图形 API 添加自定义属性会导致错误,该错误不会显示在“用户属性”边栏选项卡中。
此答案基于 saca 之前在其
answer 中提供的信息