You need to enable JavaScript to run this app. Azure AD B2C登录时如何为REST API claims exchange配置额外输入声明
优惠活动
大模型
产品
解决方案
定价
更多

Azure AD B2C登录时如何为REST API claims exchange配置额外输入声明

问题根因

注册流程能正常传递自定义属性,登录时却只传objectId,本质是两个流程的声明加载逻辑存在差异:

  • 新用户注册环节,自定义属性一般是注册表单的采集字段,值会直接写入用户目录对象,同时同步进入当前请求的声明上下文,所以调用REST API时自然能被读取并传递。
  • 常规登录流程的默认声明加载链路,只会拉取B2C内置的核心用户属性(比如objectId、邮箱、显示名),不会主动加载自定义的扩展属性,所以调用REST API时,上下文里根本没有extension_termsOfUseConsentVersion的对应值,自然只会传递已经存在的objectId。
具体实现步骤
  • 第一步:补全自定义属性的声明定义
    检查主策略和所有依赖项策略的<ClaimsSchema>节点,确保extension_termsOfUseConsentVersion有完整的声明定义:数据类型要和目录里存储的类型匹配,PartnerClaimType要和B2C目录中存的扩展属性名完全一致,不能有拼写错误。注意扩展属性的命名不能省略对应的应用唯一标识前缀,否则会出现值读不到的问题。如果声明定义不完整,就算目录里存了对应的值,登录流程也识别读不出来。
  • 第二步:修改用户属性读取的技术配置
    找到策略中负责通过objectId拉取用户全量资料的技术配置,一般命名为AAD-UserReadUsingObjectId。在这个技术配置的<OutputClaims>节点中,新增extension_termsOfUseConsentVersion的输出声明,设置Required="false"、DefaultValue=""。
    这里要注意:很多人配置时会直接在REST API的技术配置里加这个输入声明,但没有在用户读取的步骤把值捞到声明上下文里,最后传给API的永远是空值。这一步的作用是:当用户登录拿到objectId后,技术配置在从B2C目录读取用户信息时,会主动把这个自定义扩展属性的值捞出来,放到当前请求的声明上下文里,供后续步骤使用。
  • 第三步:调整REST API声明交换的输入声明配置
    找到你对接REST API的那个claims exchange技术配置,在它的<InputClaims>节点中,除了原有的objectId声明,新增extension_termsOfUseConsentVersion作为输入声明。这样当流程执行到REST调用步骤时,就会把上下文里存的这个自定义属性值,一起作为请求参数传给你的服务。
  • 第四步:校验流程编排顺序
    一定要确保登录旅程的编排顺序符合以下逻辑:
    1. 验证用户提交的账号密码,拿到用户的objectId
    2. 调用AAD-UserReadUsingObjectId从目录读取包含自定义扩展属性在内的全量用户资料,写入声明上下文
    3. 执行REST API claims exchange
      如果顺序颠倒——比如把REST调用放在读取用户属性的步骤之前,上下文里还没有自定义属性的值,就算配置了输入声明也传不出有效值。
  • 第五步:排查常见配置误区
    • 确认自定义属性已经被持久化到B2C用户目录对象上,而不是只存在于注册流程的临时会话声明里:如果注册环节写入自定义属性时没有调用AAD用户更新接口把值落到目录上,下次登录自然读不到对应的值。
    • 检查REST API技术配置的配置项,有没有通过排除规则把自定义属性过滤掉,默认无特殊配置时,上下文里存在的声明会正常传递给API。

内容的提问来源于stack exchange,提问作者mangafaua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 13:45:10