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

如何在Azure AD B2C自定义策略中获取开放/目录扩展的值?

问题解决指南:Azure AD B2C自定义策略获取目录扩展值

一、目录扩展配置修正

你当前的配置存在关键错误:目录扩展的PartnerClaimType必须使用完整的扩展名称,即extension_{b2c-extensions-app的AppId(去掉短横线)}_myString,而非extension_myString。

原因:B2C自定义策略依赖b2c-extensions-app访问目录扩展,扩展命名规则强制要求使用该应用的无短横线客户端ID作为前缀。

修正步骤:

  1. 找到b2c-extensions-app的客户端ID,移除所有短横线(例如原ID12345678-1234-1234-1234-1234567890ab处理后为123456781234123412341234567890ab)
  2. 更新声明类型定义:
<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>
  1. 同步更新技术配置文件中的输出声明:
<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创建的目录扩展。

正确操作:

  1. 获取b2c-extensions-app的对象ID(在Azure门户B2C租户>应用注册>所有应用注册中查找,名称格式为b2c-extensions-app. Do not modify. Used by AAD B2C for storing user data.)
  2. 调用Graph API创建扩展:
POST https://graph.microsoft.com/v1.0/applications/{b2c-extensions-app-object-id}/extensionProperties

{
    "name": "myString",
    "dataType": "String",
    "targetObjects": [
        "User"
    ]
}
  1. 创建完成后,扩展的完整名称即为extension_{b2cExtensionsAppClientIdWithoutDashes}_myString,与之前配置的前缀一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:20:30