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

Azure AD B2C自定义策略读取Azure AD用户employeeId值为空问题咨询

Azure AD B2C 同步Azure AD内置employeeId属性为空修复方案

问题场景

  • Azure AD租户侧已为对应用户配置employeeId属性值:
    Azure AD用户属性配置截图
  • 用户登录后,Azure AD B2C租户内对应用户未同步到employeeId属性值:
    B2C用户属性缺失截图
  • 已完成扩展声明类型定义,但策略返回的employeeid始终为空,现有声明配置如下:
<ClaimType Id="extension_employeeid">
        <DisplayName>EmployeeId</DisplayName>
        <DataType>string</DataType>
        <DefaultPartnerClaimTypes>
          <Protocol Name="OAuth2" PartnerClaimType="employeeid" />
          <Protocol Name="OpenIdConnect" PartnerClaimType="employeeid" />
          <Protocol Name="SAML2" PartnerClaimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/employeeid" />
        </DefaultPartnerClaimTypes>
        <UserHelpText>Your EmployeeId. </UserHelpText>
        <!--<UserInputType>Readonly</UserInputType>-->
        <UserInputType>TextBox</UserInputType>
  </ClaimType>

根因说明

仅定义扩展属性声明类型无法完成属性同步,缺失三个核心配置:Azure AD身份提供程序侧的声明输出映射、首次登录时的B2C目录写入规则、后续登录时的B2C目录读取规则。

修复步骤

1. 配置Azure AD身份提供程序的输出声明映射

找到自定义策略中配置Azure AD联邦登录的TechnicalProfile(通常命名为AAD-Common或对应Azure AD IdP的专属技术配置文件),在<OutputClaims>节点下新增employeeId的映射规则。注意Azure AD内置employeeId属性返回的声明URI为微软官方固定值,不要使用自定义的声明命名空间:

<OutputClaims>
  <!-- 保留原有已配置的输出声明,如issuer、objectId、displayName等 -->
  <OutputClaim ClaimTypeReferenceId="extension_employeeid" PartnerClaimType="http://schemas.microsoft.com/identity/claims/employeeid" />
</OutputClaims>

注意:如果你的Azure AD联邦配置用的是SAML协议,需要先抓包确认SAML断言中employeeId的实际命名空间,替换上述PartnerClaimType值即可。

2. 配置首次用户创建时的属性持久化规则

用户首次通过Azure AD登录B2C时,会调用AAD-UserWriteUsingAlternativeSecurityId技术配置文件在B2C租户创建用户档案,需要在该配置的<PersistedClaims>节点新增扩展属性写入规则,否则拿到的employeeId不会存入B2C目录:

<PersistedClaims>
  <!-- 保留原有已配置的持久化声明,如alternativeSecurityId、userPrincipalName等 -->
  <PersistedClaim ClaimTypeReferenceId="extension_employeeid" />
</PersistedClaims>

3. 配置存量用户登录时的属性读取规则

用户档案创建完成后,后续登录会调用AAD-UserReadUsingAlternativeSecurityId技术配置文件读取B2C目录内的用户数据,需要在该配置的<OutputClaims>节点新增扩展属性读取规则:

<OutputClaims>
  <!-- 保留原有已配置的输出声明 -->
  <OutputClaim ClaimTypeReferenceId="extension_employeeid" />
</OutputClaims>

4. (可选)配置依赖方输出声明

如果需要在应用收到的ID Token/Access Token中直接返回employeeId值,需要在对应用户旅程的RelyingParty(RP)策略文件的<OutputClaims>节点新增声明输出规则:

<OutputClaims>
  <!-- 保留原有已配置的输出声明 -->
  <OutputClaim ClaimTypeReferenceId="extension_employeeid" />
</OutputClaims>

常见踩坑说明

  • 你当前配置的<DefaultPartnerClaimTypes>仅作用于B2C向应用返回Token时的声明名映射,不会自动匹配上游Azure AD IdP返回的声明,必须在IdP的OutputClaim中显式指定PartnerClaimType
  • 若用户已经完成过首次登录、在B2C租户生成了无employeeId的用户档案,首次创建的写入逻辑不会重复触发,可删除对应用户的B2C档案重新走首次登录流程,或新增判断逻辑:当读取到的extension_employeeid为空时,调用AAD-UserWriteProfileUsingObjectId技术配置文件补写属性值
  • 确认Azure AD侧配置的是内置的「员工ID」属性(路径:Azure AD > 用户 > 选择对应用户 > 编辑属性 > 雇佣信息 > 员工ID),而非自定义扩展属性,自定义扩展属性的声明URI格式和内置属性不一致

内容的提问来源于stack exchange,提问作者Daniel Vega Ruiz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:00:53