azure - 用户旅程完成后的 B2C 重定向
问题描述
我在 B2C 租户中使用自定义策略并发现“忘记密码?” 链接重定向到错误页面 ( AADB2C90118 )。在互联网上进行研究后,我发现了一个自定义策略,它允许我将密码重置嵌入到注册或登录策略中。
这就像一个魅力,验证电子邮件并按预期更改密码。我遇到的问题是我想在重置密码成功完成后将用户重定向到登录页面。
我的目标是将用户重定向到登录页面,以便他/她能够使用新凭据唱歌。有没有办法使用自定义策略重置用户旅程或将用户重定向到登录页面?
这是检查用户是否选择更改他/她的密码的步骤:
<OrchestrationStep Order="3" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimsExist" ExecuteActionsIf="false">
<Value>isPasswordResetFlow</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="NewCredentials" TechnicalProfileReferenceId="LocalAccountChangePasswordUsingObjectId" />
</ClaimsExchanges>
</OrchestrationStep>
这是更改密码的技术配置文件:
<TechnicalProfile Id="LocalAccountChangePasswordUsingObjectId">
<DisplayName>Change password</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ContentDefinitionReferenceId">api.localaccountpasswordreset</Item>
</Metadata>
<CryptographicKeys>
<Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
</CryptographicKeys>
<InputClaims>
<InputClaim ClaimTypeReferenceId="objectId" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="newPassword" Required="true" />
<OutputClaim ClaimTypeReferenceId="reenterPassword" Required="true" />
</OutputClaims>
<ValidationTechnicalProfiles>
<ValidationTechnicalProfile ReferenceId="AAD-UserWritePasswordUsingObjectId" />
</ValidationTechnicalProfiles>
</TechnicalProfile>
解决方案
您可以在旅程中使用基于用户是否重置密码的先决条件来启动另一个索赔提供者选择,该选择提供与初始登录/向上页面逻辑完全相同的内容。
<OrchestrationStep Order="5" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
<Preconditions>
<Precondition Type="ClaimsExist" ExecuteActionsIf="false">
<Value>isPasswordResetFlow</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsProviderSelections>
<ClaimsProviderSelection TargetClaimsExchangeId="FacebookExchange" />
<ClaimsProviderSelection ValidationClaimsExchangeId="LocalAccountSigninEmailExchange" />
</ClaimsProviderSelections>
<ClaimsExchanges>
<ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-Email" />
</ClaimsExchanges>
</OrchestrationStep>
<!-- Check if the user has selected to sign in using one of the social providers -->
<OrchestrationStep Order="6" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimsExist" ExecuteActionsIf="true">
<Value>objectId</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
<Precondition Type="ClaimsExist" ExecuteActionsIf="false">
<Value>isPasswordResetFlow</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="FacebookExchange" TechnicalProfileReferenceId="Facebook-OAUTH" />
<ClaimsExchange Id="SignUpWithLogonEmailExchange" TechnicalProfileReferenceId="LocalAccountSignUpWithLogonEmail" />
</ClaimsExchanges>
</OrchestrationStep>
如果没有这个,示例将不会设置 SM-AAD 会话,并且后续策略调用或静默令牌调用无论如何都需要登录。
推荐阅读
- c++ - std::to_string 函数的位置
- ms-access - 运行时错误 3134“INSERT INTO 语句中的语法错误 (Access VBA)
- webpack - webpack导入一个es6模块,它返回一个空对象?
- python - 递归函数(子集)返回空(python)
- vector - 如何使用 PDFBOX 捕获 PDF 文件中的矢量图像
- windows-installer - 当 Advanced Installer 尝试安装已安装在 Windows 中的程序时,如何选择默认选项?
- listview - 如何在具有许多列表视图的许多活动中使用适配器
- rust - 如何将嵌套 Vecs 与 wasm-bindgen 一起使用?
- c++ - 如何使用 GOBLIN 最大流量求解器
- jdbc - 在 JDBC URL 中为 Netezza 指定数据库