Azure AD B2C自定义策略对接外部OIDC身份提供商后用户未存储问题咨询
Azure AD B2C自定义策略对接外部OIDC身份提供商后用户未存储问题咨询
嗨,我来帮你排查这个问题~
你当前的自定义策略流程其实只完成了外部身份提供商的认证和发放令牌这两个环节,完全没涉及到把用户信息写入Azure AD B2C目录的操作,所以用户自然不会被保存在B2C里啦。
要解决这个问题,咱们需要在现有的编排步骤中插入两个关键环节:
- 先查询B2C目录,看看这个外部用户是否已经存在
- 如果不存在,就用外部IDP返回的用户信息创建一个本地账户
下面是修改后的完整OrchestrationSteps配置,你可以直接参考替换:
<OrchestrationSteps> <OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin"> <ClaimsProviderSelections> <ClaimsProviderSelection TargetClaimsExchangeId="ContosoExchange" /> </ClaimsProviderSelections> </OrchestrationStep> <OrchestrationStep Order="2" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="ContosoExchange" TechnicalProfileReferenceId="MY_IDP" /> </ClaimsExchanges> </OrchestrationStep> <!-- 新增步骤:通过外部IDP的唯一标识查询B2C目录中的用户 --> <OrchestrationStep Order="3" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="AADUserReadUsingAlternativeSecurityId" TechnicalProfileReferenceId="AAD-UserReadUsingAlternativeSecurityId" /> </ClaimsExchanges> </OrchestrationStep> <!-- 新增步骤:如果用户不存在,创建新的本地账户 --> <OrchestrationStep Order="4" Type="ClaimsExchange" DependsOn="3" Condition="NotExists(objectId)"> <ClaimsExchanges> <ClaimsExchange Id="AADUserWriteUsingAlternativeSecurityId" TechnicalProfileReferenceId="AAD-UserWriteUsingAlternativeSecurityId" /> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="5" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" /> </OrchestrationSteps>
这里还要注意两个关键点:
- 确保你的
MY_IDP技术配置文件已经正确返回了alternativeSecurityId(这个是B2C关联外部用户的核心标识),以及displayName、email等你想要存储的用户声明 - 上述用到的
AAD-UserReadUsingAlternativeSecurityId和AAD-UserWriteUsingAlternativeSecurityId是B2C内置的技术配置文件,只要你的策略基础包(比如SocialAndLocalAccounts)里包含了这些,就不需要额外定义
这样修改后,用户第一次通过外部IDP登录时,B2C就会自动创建对应的本地账户并存储用户信息啦~
备注:内容来源于stack exchange,提问作者martenolofsson
相关产品推荐
相关产品推荐

