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

如何将Azure AD B2C本地账户自定义策略改为OpenID Connect?

Azure AD B2C 自定义策略适配OpenID Connect及Facebook OAuth错误解决

一、修改自定义策略XML适配OpenID Connect

1. 添加OpenID Connect身份提供者定义

在自定义策略的<ClaimsProviders>节点下,新增ClaimsProvider节点,配置OIDC身份提供者的核心参数:

<ClaimsProvider>
  <Domain>your-oidc-domain</Domain>
  <DisplayName>你的OIDC身份提供者</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="OIDC-Provider">
      <DisplayName>你的OIDC身份提供者</DisplayName>
      <Protocol Name="OpenIdConnect" />
      <Metadata>
        <Item Key="METADATA">https://你的OIDC提供者地址/.well-known/openid-configuration</Item>
        <Item Key="client_id">你的客户端ID</Item>
        <Item Key="response_types">code</Item>
        <Item Key="scope">openid profile email</Item>
        <Item Key="response_mode">form_post</Item>
        <Item Key="HttpBinding">POST</Item>
        <Item Key="UsePolicyInRedirectUri">false</Item>
      </Metadata>
      <CryptographicKeys>
        <Key Id="client_secret" StorageReferenceId="B2C_1A_OIDCProviderSecret" />
      </CryptographicKeys>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="sub" />
        <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" />
        <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="family_name" />
        <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" />
        <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="your-oidc-domain" />
        <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" />
      </OutputClaims>
      <OutputClaimsTransformations>
        <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName" />
        <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName" />
        <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId" />
      </OutputClaimsTransformations>
      <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin" />
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>
  • 替换所有占位符为实际业务值,B2C_1A_OIDCProviderSecret是提前在Azure AD B2C中创建的密钥容器,用于存储OIDC客户端密钥

2. 更新用户旅程配置

在用户旅程的<OrchestrationSteps>中,添加调用OIDC技术配置文件的步骤,让用户登录时能看到OIDC选项:

<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
  <ClaimsProviderSelections>
    <ClaimsProviderSelection TargetClaimsExchangeId="LocalAccountSigninEmailExchange" />
    <ClaimsProviderSelection TargetClaimsExchangeId="OIDCExchange" />
  </ClaimsProviderSelections>
  <ClaimsExchanges>
    <ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-Email" />
  </ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="2" Type="ClaimsExchange">
  <Preconditions>
    <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
      <Value>objectId</Value>
      <Action>SkipThisOrchestrationStep</Action>
    </Precondition>
  </Preconditions>
  <ClaimsExchanges>
    <ClaimsExchange Id="OIDCExchange" TechnicalProfileReferenceId="OIDC-Provider" />
  </ClaimsExchanges>
</OrchestrationStep>

3. 补充必要声明类型

检查<BuildingBlocks>下的<ClaimsSchema>,确保包含以下声明,缺失则添加:

<ClaimsSchema>
  <ClaimType Id="issuerUserId">
    <DisplayName>身份提供者用户ID</DisplayName>
    <DataType>string</DataType>
  </ClaimType>
  <ClaimType Id="identityProvider">
    <DisplayName>身份提供者</DisplayName>
    <DataType>string</DataType>
  </ClaimType>
  <ClaimType Id="authenticationSource">
    <DisplayName>认证来源</DisplayName>
    <DataType>string</DataType>
  </ClaimType>
</ClaimsSchema>

二、Facebook OAuth错误排查

从你提供的错误截图来看,按以下顺序排查:

  • 客户端凭证不匹配:确认Azure AD B2C中配置的Facebook应用ID、密钥与Facebook开发者后台完全一致,注意大小写和特殊字符
  • 重定向URI错误:在Facebook开发者后台的「产品>Facebook登录>设置」中,添加Azure AD B2C的重定向URI,格式为https://你的B2C租户.b2clogin.com/你的B2C租户.onmicrosoft.com/oauth2/authresp
  • 权限范围问题:检查自定义策略中Facebook技术配置文件的scope参数,仅请求Facebook允许的权限,避免废弃或未获批的权限
  • 应用状态限制:确认Facebook应用已发布为公开状态,开发模式下仅测试用户可登录
  • 协议配置问题:确保Facebook技术配置文件使用OAuth 2.0协议,检查<Protocol Name="OAuth2" />及元数据中的端点地址是否为最新版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:33:22