如何将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
相关产品推荐
相关产品推荐

