web-dev-qa-db-fra.com

Le lien de réinitialisation de mot de passe en libre-service Azure AD B2C ne fonctionne pas

J'ai pu configurer correctement la politique d'inscription/de connexion pour un locataire que je teste. J'ai défini la propriété Réinitialiser le mot de passe pour permettre à tout le monde de réinitialiser son mot de passe à l'aide de son e-mail. Actuellement, l'utilisateur s'inscrit en utilisant son e-mail (également son nom d'utilisateur), son prénom et son nom.

Cependant, lorsque je clique sur le lien "J'ai oublié mon mot de passe" sur la page de connexion, il me redirige simplement vers la même page. Y a-t-il quelque chose qui me manque ici?

20
Riz

Il existe deux mécanismes différents pour la réinitialisation de mot de passe dans Azure AD B2C:

  1. Politique de connexion : Aucun travail requis par l'application, en cliquant sur "J'ai oublié mon mot de passe" redirige l'utilisateur automatiquement sur une page générique de réinitialisation de mot de passe de marque Microsoft.

  2. Politique d'inscription/de connexion : Cela nécessite que l'application fasse un travail supplémentaire . En cliquant sur "J'ai oublié mon mot de passe" redirige l'utilisateur vers l'application avec un code d'erreur. L'application doit détecter le code d'erreur dans la demande, puis rediriger l'utilisateur vers la stratégie de réinitialisation de mot de passe Azure AD B2C. La politique de réinitialisation du mot de passe peut être largement personnalisée.

Pour en savoir plus sur la façon d'implémenter la deuxième approche, voici le code qui se connecte à la notification AuthenticationFailed et redirige vers votre propre action de contrôleur PasswordReset , à partir de Démarrage rapide B2C Inscription/Connexion, 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);
}

Et voici l'action du contrôleur PasswordReset qui redirige l'utilisateur vers la stratégie B2C de réinitialisation du mot de passe, à partir du même Démarrage rapide de l'inscription/de la connexion B2C, contrôleur de compte

public void ResetPassword()
{
    if (!Request.IsAuthenticated)
    {
        HttpContext.GetOwinContext().Authentication.Challenge(
        new AuthenticationProperties() { RedirectUri = "/" }, Startup.PasswordResetPolicyId);
    }
}

Par souci d'exhaustivité, assurez-vous de vérifier le guide complet/aperçu de la configuration d'une politique d'inscription/de connexion Azure AD B2C

21
Saca