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. 测试验证
- 发布更新后的自定义策略
- 用新用户完成注册流程
- 查看Dataverse Contact表,确认所有字段是否已正确同步
- 使用JWT解析工具检查令牌,确保所有声明均存在且值正确
内容的提问来源于stack exchange,提问作者HelpAStudentOut
相关产品推荐
相关产品推荐

