web-dev-qa-db-ja.com

Azure AD B2Cセルフサービスのパスワードリセットリンクが機能しない

テストしているテナントのサインアップ/サインインポリシーを適切に設定できました。全員がメールを使用してパスワードをリセットできるように、[パスワードのリセット]プロパティを設定しました。現在、ユーザーはメール(ユーザー名も含む)、姓、名を使用してサインアップします。

ただし、サインインページの[パスワードを忘れた]リンクをクリックすると、同じページにリダイレクトされます。ここで見逃しているものはありますか?

20
Riz

Azure AD B2Cのパスワードリセットには、2つの異なるメカニズムがあります。

  1. サインインポリシー:アプリケーションでの作業は必要ありません。「パスワードを忘れた」をクリックします。 Microsoftブランドの一般的なパスワードリセットページにユーザーを自動的にリダイレクトします。

  2. サインアップ/サインインポリシーこれには、アプリケーションが追加の作業を行う必要があります「パスワードを忘れた」をクリックすると、ユーザーはエラーコードとともにアプリケーションにリダイレクトされます。アプリケーションは、要求内のエラーコードを検出し、さらにユーザーをAzure AD B2Cパスワードリセットポリシーにリダイレクトする必要があります。パスワードリセットポリシーは大幅にカスタマイズできます。

2番目のアプローチを実装する方法の詳細については、AuthenticationFailed通知にフックし、独自のPasswordResetコントローラーアクションにリダイレクトするコードを示しますB2Cサインアップ/サインインクイックスタート、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);
}

そして、同じ B2Cサインアップ/サインインクイックスタート、アカウントコントローラー からユーザーをパスワードリセットB2CポリシーにリダイレクトするコードPasswordResetコントローラーアクションを次に示します。

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

完全を期すために、必ずチェックアウトしてください Azure AD B2Cサインアップ/サインインポリシーの設定の完全なガイド/概要

21
Saca