2017-01-06 5 views
8

Я был в состоянии правильно настроить политику регистрации/входа для арендатора, который я тестирую. Я установил свойство Reset Password, чтобы каждый мог сбросить свой пароль, используя свой адрес электронной почты. В настоящее время пользователь подписывается по электронной почте (также по имени пользователя), имени и фамилии.Azure AD B2C самообслуживание пароль сброс ссылка не работает

Однако, когда я нажимаю ссылку «Я забыл свой пароль» на странице входа, она просто перенаправляет меня обратно на ту же страницу. Здесь что-то не хватает?

ответ

12

Существует два различных механизма Сброс пароля в Azure AD B2C:

  1. Вход в Политике: Нет работа требует приложений, нажав на «Я забыл свой пароль» перенаправляет пользователь автоматически на общую страницу сброса пароля Microsoft.

  2. Подписывает/входа в политике: Это требует применения, чтобы сделать некоторую дополнительную работу. Нажав на «Я забыл свой пароль» перенаправляет пользователя обратно в приложение с кодом ошибки. Приложение должно обнаружить, что код ошибки в запросе, а затем перенаправить пользователя в политику сброса пароля 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

+0

Спасибо за отличный ответ. Я пытаюсь работать с ним в Azure Mobile App, и, похоже, не существует каких-либо условий для обработки сценариев неудачных уведомлений. Есть идеи по этому поводу? TIA – nhwilly

+0

@nhwilly с использованием рекомендованной Microsoft библиотеки AppAuth-iOS (или AppAuth-Android) и ее OIDAuthState.authState (byPresenting: presenting: callback :) method, затем, когда пользователь нажимает «Я забыл свой пароль» в веб-представлении вашего пользователя следует перенаправить обратно в приложение (используя предоставленный вами редирект URI), и в указанном обратном вызове вы должны получить nil authState и ошибку. Ошибка будет содержать код «AADB2C90118». Если вы обнаружите это, вы знаете, что теперь вам нужно перенаправить на страницу пароля сброса, как указано выше. – jj0b

+0

Спасибо. Наконец, нашли несколько образцов и обработали их. – nhwilly