如何在Azure AD B2C自定义策略中获取开放/目录扩展的值?
问题解决指南:Azure AD B2C自定义策略获取目录扩展值
一、目录扩展配置修正
你当前的配置存在关键错误:目录扩展的PartnerClaimType必须使用完整的扩展名称,即extension_{b2c-extensions-app的AppId(去掉短横线)}_myString,而非extension_myString。
原因:B2C自定义策略依赖b2c-extensions-app访问目录扩展,扩展命名规则强制要求使用该应用的无短横线客户端ID作为前缀。
修正步骤:
- 找到
b2c-extensions-app的客户端ID,移除所有短横线(例如原ID12345678-1234-1234-1234-1234567890ab处理后为123456781234123412341234567890ab) - 更新声明类型定义:
<ClaimType Id="myString"> <DisplayName>This is my string</DisplayName> <DataType>string</DataType> <DefaultPartnerClaimTypes> <Protocol Name="OpenIdConnect" PartnerClaimType="extension_123456781234123412341234567890ab_myString" /> <Protocol Name="OAuth2" PartnerClaimType="extension_123456781234123412341234567890ab_myString" /> </DefaultPartnerClaimTypes> </ClaimType>
- 同步更新技术配置文件中的输出声明:
<OutputClaim ClaimTypeReferenceId="myString" PartnerClaimType="extension_123456781234123412341234567890ab_myString" />
二、调试策略运行时声明值的方法
1. 启用Application Insights日志
- 在Azure门户为B2C租户启用Application Insights集成,在
TrustFrameworkExtensions.xml的对应技术配置文件或DefaultUserJourney中添加元数据:
<Item Key="ApplicationInsightsTelemetryEnabled">true</Item> <Item Key="ApplicationInsightsInstrumentationKey">你的AI密钥</Item>
- 运行认证流程后,在Application Insights的
traces表中查询ClaimDetails字段,即可查看所有流转的声明值。
2. 添加临时自断言页面展示声明
- 在用户旅程中插入一个临时步骤:
<OrchestrationStep Order="2.5" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="ShowClaims" TechnicalProfileReferenceId="SelfAsserted-ShowClaims" /> </ClaimsExchanges> </OrchestrationStep>
- 新增对应的技术配置文件:
<TechnicalProfile Id="SelfAsserted-ShowClaims"> <DisplayName>Show Claims</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Metadata> <Item Key="ContentDefinitionReferenceId">api.selfasserted</Item> </Metadata> <InputClaims> <InputClaim ClaimTypeReferenceId="objectId" /> <InputClaim ClaimTypeReferenceId="myString" /> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="objectId" /> <OutputClaim ClaimTypeReferenceId="myString" /> </OutputClaims> </TechnicalProfile>
- 运行流程时会弹出页面显示当前声明值,调试完成后删除该步骤即可。
三、Graph API创建目录扩展的正确方式
你当前的做法不符合B2C限制:不能用自定义Graph应用创建供B2C自定义策略使用的目录扩展,必须使用b2c-extensions-app创建。
原因:B2C自定义策略仅能识别由b2c-extensions-app创建的目录扩展。
正确操作:
- 获取
b2c-extensions-app的对象ID(在Azure门户B2C租户>应用注册>所有应用注册中查找,名称格式为b2c-extensions-app. Do not modify. Used by AAD B2C for storing user data.) - 调用Graph API创建扩展:
POST https://graph.microsoft.com/v1.0/applications/{b2c-extensions-app-object-id}/extensionProperties { "name": "myString", "dataType": "String", "targetObjects": [ "User" ] }
- 创建完成后,扩展的完整名称即为
extension_{b2cExtensionsAppClientIdWithoutDashes}_myString,与之前配置的前缀一致。
内容的提问来源于stack exchange,提问作者Danny Idlis
相关产品推荐
相关产品推荐

