将声明添加到Azure B2C令牌

20
在 Azure AD B2C 中,如果声明存储在自己的服务器上(而不是 B2C 中可用),有哪些方法可以将自定义声明(例如用户订阅或角色列表)包含在令牌中发放之前?目标是将声明包含在令牌中,以避免在每个请求上进行附加的往返存储。调查此主题带我了解以下方法:
  1. 通过 Graph API 添加自定义属性,并配置在 JWT 中包含。属性值应与我们的数据存储保持同步。
  2. 自定义登录策略,就像这篇文章中所述 https://learn.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-rest-api-step-custom 但是如果我理解正确,额外的第六步是公开可用的 API 用户旅程,以非受限方式请求(请求未受密钥保护,可能被用来获取呈现的 UserId 的用户声明)。
  3. IdentityServer4 联合网关 http://docs.identityserver.io/en/release/topics/federation_gateway.html ,它将允许在发放之前添加任何声明。

是的,您可以使用您列出的任何方式将声明添加到Azure AD B2C令牌中。这里还有其他潜在的问题吗? - Saca
@Saca谢谢您的回复。我想知道是否有其他,可能是标准的或首选的方法来添加已发行令牌中的自定义声明,而我没有注意到?选项2看起来是一种很好的直接方式,但我担心步骤6中对/api/LookUpLoyaltyWebHook?code=MQu...w==的调用是从b2c到api(服务器到服务器)还是从客户端(浏览器)到api? - st1
1
该调用是由Azure AD B2C服务发起的,而不是用户的浏览器,因此是服务器对服务器的通信。您的Azure函数代码不会泄露给最终用户。 - Saca
嗨@st1和@saca,你们能否帮助我将像“groups”这样的声明添加到ADB2C令牌中?我已经尝试了第二个步骤,但似乎对我无效。任何在这方面的帮助都将不胜感激。 - Saurabh Srivastava
1个回答

28

你所列出的前两种机制是在Azure AD B2C发行令牌中包含自定义声明最常见和推荐的方式:

  1. 添加一个自定义属性并将其包含在JWT中。您可以通过B2C UI或Graph API启用自定义属性via the B2C UIvia the Graph API。您需要构建自己的机制,以使此属性的值在B2C中与您的外部来源via the Graph API同步。

  2. 您可以使用自定义策略在身份验证流程中添加一步调用Rest API以获取声明并将其包含在令牌中。这个对Rest API的调用将由Azure AD B2C服务执行,而不是用户的浏览器,因此它将是一次服务对服务的调用(与客户端对服务的调用相反),从而保持您用于身份验证的任何密钥与您的Rest API安全(如Azure函数代码)。


3
据我理解,如果我想选择选项1,我需要将这个自定义属性包含在其中一个用户流程中?我有一个与帖子作者非常相似的情况,但我不想在登录和注册页面中公开自定义属性。我想让另一个服务来管理自定义字段(我已经使用Graph API完成了)并将其包含在JWT令牌中。 - Anuar Nurmakanov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接