テストしているテナントのサインアップ/サインインポリシーを適切に設定できました。全員がメールを使用してパスワードをリセットできるように、[パスワードのリセット]プロパティを設定しました。現在、ユーザーはメール(ユーザー名も含む)、姓、名を使用してサインアップします。
ただし、サインインページの[パスワードを忘れた]リンクをクリックすると、同じページにリダイレクトされます。ここで見逃しているものはありますか?
Azure AD B2Cのパスワードリセットには、2つの異なるメカニズムがあります。
サインインポリシー:アプリケーションでの作業は必要ありません。「パスワードを忘れた」をクリックします。 Microsoftブランドの一般的なパスワードリセットページにユーザーを自動的にリダイレクトします。
サインアップ/サインインポリシー:これには、アプリケーションが追加の作業を行う必要があります。 「パスワードを忘れた」をクリックすると、ユーザーはエラーコードとともにアプリケーションにリダイレクトされます。アプリケーションは、要求内のエラーコードを検出し、さらにユーザーを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サインアップ/サインインポリシーの設定の完全なガイド/概要