Существует два различных механизма Сброс пароля в Azure AD B2C:
Вход в Политике: Нет работа требует приложений, нажав на «Я забыл свой пароль» перенаправляет пользователь автоматически на общую страницу сброса пароля Microsoft.
Подписывает/входа в политике: Это требует применения, чтобы сделать некоторую дополнительную работу. Нажав на «Я забыл свой пароль» перенаправляет пользователя обратно в приложение с кодом ошибки. Приложение должно обнаружить, что код ошибки в запросе, а затем перенаправить пользователя в политику сброса пароля Azure AD B2A. Политика сброса пароля может быть настроена широко.
Отправляясь в подробности относительно того, как реализовать второй подход, вот код, который крюки вверх в уведомлении AuthenticationFailed и перенаправляет на свой собственный контроллер действий PasswordReset, от B2C Sign-up/Sign-in quickstart, Startup.Auth.cs
private Task AuthenticationFailed(AuthenticationFailedNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions> notification)
{
notification.HandleResponse();
if (notification.ProtocolMessage.ErrorDescription != null && notification.ProtocolMessage.ErrorDescription.Contains("AADB2C90118"))
{
// If the user clicked the reset password link, redirect to the reset password route
notification.Response.Redirect("/Account/ResetPassword");
}
else if (notification.Exception.Message == "access_denied")
{
// If the user canceled the sign in, redirect back to the home page
notification.Response.Redirect("/");
}
else
{
notification.Response.Redirect("/Home/Error?message=" + notification.Exception.Message);
}
return Task.FromResult(0);
}
И вот код контроллера паролей PasswordReset, который перенаправляет пользователя на политику сброса пароля B2C, из тех же B2C Sign-up/Sign-in quickstart, Account Controller
public void ResetPassword()
{
if (!Request.IsAuthenticated)
{
HttpContext.GetOwinContext().Authentication.Challenge(
new AuthenticationProperties() { RedirectUri = "/" }, Startup.PasswordResetPolicyId);
}
}
Для получения полноты, убедитесь, что вы заказали full guide/overview of setting up an Azure AD B2C Sign-up/Sign-in Policy
Спасибо за отличный ответ. Я пытаюсь работать с ним в Azure Mobile App, и, похоже, не существует каких-либо условий для обработки сценариев неудачных уведомлений. Есть идеи по этому поводу? TIA – nhwilly
@nhwilly с использованием рекомендованной Microsoft библиотеки AppAuth-iOS (или AppAuth-Android) и ее OIDAuthState.authState (byPresenting: presenting: callback :) method, затем, когда пользователь нажимает «Я забыл свой пароль» в веб-представлении вашего пользователя следует перенаправить обратно в приложение (используя предоставленный вами редирект URI), и в указанном обратном вызове вы должны получить nil authState и ошибку. Ошибка будет содержать код «AADB2C90118». Если вы обнаружите это, вы знаете, что теперь вам нужно перенаправить на страницу пароля сброса, как указано выше. – jj0b
Спасибо. Наконец, нашли несколько образцов и обработали их. – nhwilly