【发布时间】:2019-12-15 23:46:42
【问题描述】:
问题
我正在尝试在我的应用程序中处理“重置密码”用户流程。单击“忘记密码”链接后,成功触发 OnRemoteFailure OpenId 事件,成功重定向到指定的 url 'Home/ResetPassword',但相反或重定向到 ADB2C 重置密码屏幕,它重定向回登录/登录-向上页面。
背景
注册/登录策略成功运行,但根据 Microsoft 文档:https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-reference-policies:
" 使用本地帐户的注册或登录用户流程在体验的第一页包含忘记密码?链接。单击此链接不会自动触发密码重置用户流程。 em>
相反,错误代码 AADB2C90118 会返回到您的应用程序。您的应用程序需要通过运行重置密码的特定用户流来处理此错误代码。要查看示例,请查看演示用户流链接的简单 ASP.NET 示例。 "
Active Directory B2C 设置
用户流
代码
OpenIdEvent
protected virtual Task OnRemoteFailure(RemoteFailureContext context)
{
context.HandleResponse();
// Handle the error code that Azure AD B2C throws when trying to reset a password from the login page
// because password reset is not supported by a "sign-up or sign-in policy"
if (context.Failure is OpenIdConnectProtocolException && context.Failure.Message.Contains("AADB2C90118"))
{
// If the user clicked the reset password link, redirect to the reset password route
context.Response.Redirect("/Home/ResetPassword");
}
else if (context.Failure is OpenIdConnectProtocolException && context.Failure.Message.Contains("access_denied"))
{
context.Response.Redirect("/");
}
else
{
context.Response.Redirect("/Home/Error?message=" + WebUtility.UrlEncode(context.Failure.Message));
}
return Task.FromResult(0);
}
家庭控制器
public IActionResult ResetPassword()
{
var redirectUrl = Url.Action(nameof(HomeController.Index), "Home");
var properties = new AuthenticationProperties { RedirectUri = redirectUrl };
properties.Items[AzureADB2COptionsExtended.PolicyAuthenticationProperty] = _adb2cOptions.ResetPasswordPolicyId;
return Challenge(properties, AzureADB2CDefaults.AuthenticationScheme);
}
我发现很多示例都使用 OWIN...关于 ASP.Net Core 2.2 w/ADB2C 的文档非常有限。
【问题讨论】:
-
那么
AzureADB2COptionsExtended.PolicyAuthenticationProperty这个值是多少?
标签: c# azure azure-ad-b2c openid-connect asp.net-core-2.2