Azure AD B2C自定义策略:如何提供独立注册链接?
Azure AD B2C自定义策略实现方案(满足单一RP、合并UI、独立注册链接等需求)
一、单一依赖方(RP)策略配置
- 仅维护一个RP策略文件,所有用户流程(登录、注册、密码重置)都通过该RP触发,避免多RP冗余。在RP文件中统一引用TrustFrameworkBase和Extensions文件,将业务逻辑集中在Extensions层管理,RP层仅负责对外暴露授权端点。
二、基于CombinedSignInAndSignUp实现合并UI
- 在主用户旅程中,将起始步骤配置为
CombinedSignInAndSignUp,同时启用登录表单和注册入口:
<UserJourney Id="SignUpOrSignIn"> <OrchestrationSteps> <OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin"> <ClaimsProviderSelections> <ClaimsProviderSelection TargetClaimsExchangeId="LocalAccountSigninEmailExchange" /> </ClaimsProviderSelections> <ClaimsExchanges> <ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-Email" /> </ClaimsExchanges> </OrchestrationStep> <!-- 后续步骤:注册信息收集、MFA验证、令牌颁发等 --> <OrchestrationStep Order="2" Type="ClaimsExchange"> <Preconditions> <Precondition Type="ClaimsExist" ExecuteActionsIf="false"> <Value>objectId</Value> <Action>SkipThisOrchestrationStep</Action> </Precondition> </Preconditions> <ClaimsExchanges> <ClaimsExchange Id="AADUserReadWithObjectId" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId" /> </ClaimsExchanges> </OrchestrationStep> </OrchestrationSteps> </UserJourney>
- 对应
ContentDefinition配置合并UI模板,确保页面同时展示登录表单和"创建账户"按钮,可通过自定义HTML调整布局样式。
三、子旅程实现忘记密码功能
- 定义密码重置子旅程,将其嵌入主用户流程:
<SubJourneys> <SubJourney Id="PasswordReset" Type="Call"> <OrchestrationSteps> <OrchestrationStep Order="1" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="PasswordResetDiscoveryExchange" TechnicalProfileReferenceId="LocalAccountDiscoveryUsingEmailAddress" /> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="2" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="PasswordResetWriteExchange" TechnicalProfileReferenceId="LocalAccountWritePasswordUsingObjectId" /> </ClaimsExchanges> </OrchestrationStep> </OrchestrationSteps> </SubJourney> </SubJourneys>
- 在
CombinedSignInAndSignUp的技术配置中,添加忘记密码触发逻辑:在自定义UI的登录区域加入"忘记密码"链接,点击后触发子旅程跳转;或通过策略内的UserJourneyBehaviors配置自动识别密码重置请求。
四、实现独立注册链接
- 无需新增额外RP策略,直接通过在应用端构造授权URL时添加
prompt=create参数,强制进入注册流程:
https://your-tenant.b2clogin.com/your-tenant.onmicrosoft.com/B2C_1A_signup_signin/oauth2/v2.0/authorize? client_id=your-client-id &response_type=code &redirect_uri=https://your-app-redirect-uri &scope=openid offline_access https://your-tenant.onmicrosoft.com/api/read &prompt=create
- 该方式复用现有RP策略,无需修改用户旅程结构,确保注册流程与主流程的一致性。
五、关键注意事项
- 确保Base、Extensions、RP策略文件的版本一致,避免兼容性问题;
- 自定义UI时,保持合并页面的交互逻辑清晰,确保"忘记密码""注册"入口易于识别;
- 全流程测试:验证正常登录、新用户注册、密码重置的跳转及数据处理是否符合预期。
内容的提问来源于stack exchange,提问作者Spotify
相关产品推荐
相关产品推荐

