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

Azure AD B2C注册声明映射至Dataverse Contact表问题求助

解决Azure AD B2C到Dataverse Contact表的声明映射失效问题

问题背景

已实现Azure AD B2C自定义注册策略,可捕获URL查询参数到输入字段,令牌能正确传递所有声明,但通过Azure AD B2C身份提供商的「注册声明映射」同步至Dataverse Contact表时,仅given name和email生效,其余字段(姓氏、中间名、手机号、职位、组织名)均未同步。

关键错误排查

从你提供的配置中,首先发现注册声明映射字符串存在拼写错误:你尝试的配置中middlenameextension_middleName缺少等号,应为middlename=extension_middleName。此外,声明名称需与B2C令牌实际输出的名称严格匹配。

分步解决方案

1. 修正注册声明映射配置

使用Dataverse Contact表的逻辑名,对应B2C令牌中的声明名称,以下是两种正确配置方式(根据令牌声明名选择):

方式一:匹配claims_supported声明名

如果令牌输出的声明名与你提供的claims_supported列表一致(如given_name、family_name、middleName),映射字符串应为:

firstname=given_name,lastname=family_name,emailaddress1=email,middlename=middleName,mobilephone=mobile_phone,jobtitle=job_title,adx_organizationname=organisationName

方式二:匹配自定义策略输出的声明名

如果令牌输出的是自定义策略中定义的原始声明名(如extension_middleName、extension_mobilePhone),映射字符串应为:

firstname=givenName,lastname=surname,emailaddress1=email,middlename=extension_middleName,mobilephone=extension_mobilePhone,jobtitle=jobTitle,adx_organizationname=extension_organisationName

2. 确保B2C令牌输出正确的声明名

检查SignUp.xml中RelyingParty的PolicyProfile技术配置文件,给自定义扩展属性添加PartnerClaimType,让令牌输出的声明名与claims_supported一致:

<TechnicalProfile Id="PolicyProfile">
  <DisplayName>PolicyProfile</DisplayName>
  <Protocol Name="OpenIdConnect" />
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="displayName" />
    <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" />
    <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="family_name" />
    <OutputClaim ClaimTypeReferenceId="email" />
    <OutputClaim ClaimTypeReferenceId="extension_middleName" PartnerClaimType="middleName" />
    <OutputClaim ClaimTypeReferenceId="extension_mobilePhone" PartnerClaimType="mobile_phone" />
    <OutputClaim ClaimTypeReferenceId="jobTitle" PartnerClaimType="job_title" />
    <OutputClaim ClaimTypeReferenceId="extension_organisationName" PartnerClaimType="organisationName" />
    <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
    <OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}" />
  </OutputClaims>
  <SubjectNamingInfo ClaimType="sub" />
</TechnicalProfile>

3. 验证自定义策略的声明传递逻辑

确认以下配置已正确包含所有需要同步的字段:

  • LocalAccountSignUpWithLogonEmail的InputClaims和OutputClaims已包含所有字段(你的配置已满足)
  • AAD-UserWriteUsingLogonEmail的PersistedClaims已持久化所有字段(你的配置已满足)

4. 测试验证

  1. 发布更新后的自定义策略
  2. 用新用户完成注册流程
  3. 查看Dataverse Contact表,确认所有字段是否已正确同步
  4. 使用JWT解析工具检查令牌,确保所有声明均存在且值正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 10:29:54