前提・実現したいこと
ASP.NET MVCでGoogle Authenticatorなどを用いた認証を実装したいと思っております。
流れとしてはIDとパスワードでログインした後にGoogle Authenticatorなどで発行されたワンタイムパスワードで認証が通ればログイン後の画面に遷移させたいと思っております。
Using Google Authenticator with ASP.NET Identityこちらのページを参考に実装してAuthenticatorの有効化までは完了しました。(↓画像)
説明にあるように一度ログアウトしてログインしてもAccount/SendCode
に遷移してくれず、普通にログインできてしまいました。
AccountController.Login
のresult
がRequiresVerification
にならないためだと思っているのですが、どのような設定が必要なのでしょうか?
ご存じの方、いらっしゃいましたらよろしくお願いいたします。
C#
1 // POST: /Account/Login 2 [HttpPost] 3 [AllowAnonymous] 4 [ValidateAntiForgeryToken] 5 public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 6 { 7 if (!ModelState.IsValid) 8 { 9 return View(model); 10 } 11 12 // これは、アカウント ロックアウトの基準となるログイン失敗回数を数えません。 13 // パスワード入力失敗回数に基づいてアカウントがロックアウトされるように設定するには、shouldLockout: true に変更してください。 14 var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); 15 switch (result) 16 { 17 case SignInStatus.Success: 18 return RedirectToLocal(returnUrl); 19 case SignInStatus.LockedOut: 20 return View("Lockout"); 21 case SignInStatus.RequiresVerification: 22 return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe }); 23 case SignInStatus.Failure: 24 default: 25 ModelState.AddModelError("", "無効なログイン試行です。"); 26 return View(model); 27 } 28 }
ソースコードの補足
Using Google Authenticator with ASP.NET Identityこちらのページのコピペでは動かなかったものや追加したものはこちらです。
C#
1 // Controllers/ManageController 2 public async Task<ActionResult> DisableGoogleAuthenticator() 3 { 4 var user = await UserManager.FindByIdAsync(User.Identity.GetUserId()); 5 if (user != null) 6 { 7 user.IsGoogleAuthenticatorEnabled = false; 8 user.GoogleAuthenticatorSecretKey = null; 9 10 await UserManager.UpdateAsync(user); 11 12 await SignInManager.SignInAsync(user, false, false); // 下記ではエラーが出ていたのでこちらに書き換え 13 //await SignInAsync(user, isPersistent: false); 14 } 15 return RedirectToAction("Index", "Manage"); 16 } 17 18
↓記載がなかったので作成
C#
1 // Models/GoogleAuthenticatorViewModel 2 public class GoogleAuthenticatorViewModel 3 { 4 public string SecretKey {get;set;} 5 6 public string BarcodeUrl { get; set; } 7 8 public string Code { get; set; } 9 }
補足情報(FW/ツールのバージョンなど)
- .Net Framework 4.7
- MVC
- 認証: 個別のユーザーアカウント
回答1件
あなたの回答
tips
プレビュー