将声明添加到令牌 Azure B2C

Posted

技术标签:

【中文标题】将声明添加到令牌 Azure B2C【英文标题】:Add claims into token Azure B2C 【发布时间】:2018-02-09 11:12:45 【问题描述】:

如果声明存储在自己的服务器上的某个位置(在 B2C 中不可用),在令牌中发布令牌之前,有哪些方法可以在令牌中包含自定义声明(例如用户订阅或角色列表)? 目标是在令牌中声明,以避免在每次请求时额外往返存储。

对该主题的调查使我想到了以下几种方式:

    通过 Graph API 添加自定义属性,配置为包含在 JWT 中。属性值应与我们的数据存储保持同步。

    自定义登录策略,如本文https://docs.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 令牌中。这里还有其他潜在的问题吗? @Saca 感谢您的回复。我很感兴趣是否有其他标准方式或首选方式可以在我没有注意到的已发行令牌中添加自定义声明?选项 2 看起来是一个很好的直接方法,但在这里我担心在步骤 6 中调用 /api/LookUpLoyaltyWebHook?code=MQu...w== 是 b2c 到 api(服务器到服务器)或客户端(浏览器)到 api? 该调用由 Azure AD B2C 服务发出,不是由用户的浏览器发出,因此是服务器到服务器。您的 Azure 函数代码不会泄露给最终用户。 嗨@st1 和@saca 请帮我将groups 之类的声明添加到ADB2C 令牌中。我已经尝试了第二步,但似乎它不适合我。在这方面的任何帮助都将是非常可观的。 【参考方案1】:

您概述的前两种机制是在 Azure AD B2C 颁发的令牌中包含自定义声明的最常见和推荐的方法:

    添加custom attribute 和include it in the JWT。您可以启用自定义属性via the B2C UI 或via the Graph API。您需要构建自己的机制,以使 B2C 中此属性的值与您的外部源 via the Graph API 保持同步。

    您可以使用custom policy 到add a step in your authentication flow to call a Rest API to obtain the claim and include it in the token。对 Rest API 的调用将由 Azure AD B2C 服务而不是用户的浏览器执行,因此它将是服务到服务调用(相对于客户端到服务调用),保留您使用的任何机密使用您的 Rest API 安全(例如 Azure 函数代码)进行身份验证。

【讨论】:

据我所知,如果我想使用选项 1,我必须包含这个归因于用户流之一的自定义?我和这个帖子的作者有一个非常相似的案例,但我不想在登录和注册页面中公开自定义属性。我想让自定义字段由另一个服务管理(我已经用 Graph API 完成了),我想将它包含到 JWT 令牌中。

以上是关于将声明添加到令牌 Azure B2C的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将自定义范围添加到Azure B2C

如何使用 api 连接器和 asp net core web api 通过自定义声明丰富 azure b2c 令牌

如何将自己的元素(文本等)添加到 Azure AD B2C 语言自定义?

在 Azure B2C 中获取刷新令牌,Azure AD App 是第三方 IDP

Azure B2C:如何在 JWT 令牌中获得“组”声明

Azure B2C - 无法从策略中的 JWT 客户端断言令牌读取“日期”声明