You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure B2C自定义策略无法读写自定义属性extension_termsofservice

Azure AD B2C 自定义策略扩展属性读写失败排查建议
  • 先核对扩展属性的归属应用ID
    自定义策略读写目录扩展属性时,AAD-Common配置项里的ApplicationObjectId必须和注册termsofservice扩展属性的应用对象ID完全一致,填错ID是这类问题最常见的原因。你可以通过Graph查询确认属性归属:执行查询定位注册了该属性的应用,不要用其他应用(包括b2c默认的extensions应用)的ID替换。
  • 补全SM-Consent技术配置文件的必要配置
    你当前的SM-Consent仅引用了AAD-Common,缺少AAD目录操作必需的协议声明,也没有继承正确的用户读写基类,根本不会触发实际的目录写入操作:
    1. 先在SM-Consent里添加协议配置:
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.AzureActiveDirectoryProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      
    2. 替换当前的IncludeTechnicalProfile引用,不要只引AAD-Common,如果是通过用户ObjectId定位账号,就引用AAD-UserReadUsingObjectId和AAD-UserWriteProfileUsingObjectId两个基类,这两个基类已经内置了正确的目录读写逻辑和用户定位规则。
    3. 修正InputClaims配置:你当前只传了email作为输入声明,AAD写入用户属性必须拿到用户的objectId作为唯一定位标识,仅靠邮箱无法定位目标用户,会导致写入静默失败,需要把objectId加到InputClaims里并设置为必填。
  • 修正用户旅程的属性读取逻辑
    你在步骤7的前置判断是“extension_termsofservice存在就跳过同意步骤”,但如果前面登录环节读取用户属性的技术profile(比如登录用的AAD读取配置)的OutputClaims里没有加入extension_termsofservice,即使用户目录里已经存了该值,策略的声明袋里也不会有这个字段,会导致每次登录都重复弹同意页。需要在用户旅程前置的AAD用户读取步骤里,把extension_termsofservice加入输出声明列表。
  • 修正会话管理配置错误
    你当前PromptUserTermsOfUse自断言技术profile把UseTechnicalProfileForSessionManagement指向了SM-Consent,SM-Consent是目录写入技术profile,不具备会话管理能力,这里需要引用策略默认的AAD会话管理profile(通常是SM-AAD),配置错误会导致写入流程执行异常。
  • 开启日志定位具体错误
    给自定义策略配置Application Insights追踪,查看旅程执行到SM-Consent步骤时的具体报错,比如权限不足、扩展属性不存在、用户对象找不到等,能快速定位根因。
  • 核对扩展属性命名一致性
    如果你是通过Azure门户的“用户属性”菜单创建的内置自定义属性,该属性默认归属b2c-extensions-app,这种情况不能填你自己的应用Object ID,需要换成b2c-extensions-app的对象ID才能正常读写。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:48:14