質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

3330閲覧

[ASP.NET MVC]Google Authenticatorを用いた認証を実装したい

kawauso

総合スコア56

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2021/10/20 09:10

編集2021/10/20 10:03

前提・実現したいこと

ASP.NET MVCでGoogle Authenticatorなどを用いた認証を実装したいと思っております。
流れとしてはIDとパスワードでログインした後にGoogle Authenticatorなどで発行されたワンタイムパスワードで認証が通ればログイン後の画面に遷移させたいと思っております。

Using Google Authenticator with ASP.NET Identityこちらのページを参考に実装してAuthenticatorの有効化までは完了しました。(↓画像)
イメージ説明
説明にあるように一度ログアウトしてログインしてもAccount/SendCodeに遷移してくれず、普通にログインできてしまいました。

AccountController.LoginresultRequiresVerificationにならないためだと思っているのですが、どのような設定が必要なのでしょうか?
ご存じの方、いらっしゃいましたらよろしくお願いいたします。

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
  • 認証: 個別のユーザーアカウント

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/10/20 09:33

> ASP.NET MVC4でGoogle Authenticatorなどを用いた二要素認証を実装したいと思っております。 それっていわゆる二要素認証とは違うのでないでしょうか? ここ Teratail のように、「teratailアカウントでログイン」と「SNSアカウントでログイン」があって後者でログインする話では? 以下の記事に書いてある「(5) OAuth / OpenId」でログインするという話では? MVC4 インターネットアプリケーション http://surferonwww.info/BlogEngine/post/2014/07/23/mvc4-web-application-created-by-using-the-internet-application-template.aspx
kawauso

2021/10/20 09:47

ID(Email)とパスワードで認証した後、Google Authenticatorなどで発行されたワンタイムパスワードを使用するので2要素認証だと思っていたのですが違うのでしょうか? SNSアカウントなどのでログインしたいというわけではありません。
退会済みユーザー

退会済みユーザー

2021/10/20 09:48

違います。
退会済みユーザー

退会済みユーザー

2021/10/21 02:29 編集

上のコメントで「違います」と書いたのですが自分の思い違いだったようです。すみません。 MVC5 の ASP.NET Identity の 2 要素認証で標準でサポートされているのは SMS と email によるものですが、それに代えて ASP.NET Core MVC の標準(?)の Google Authenticator App を使うということですね。
kawauso

2021/10/21 02:37

いえいえ、自分の質問の仕方も悪かったかもしれません。 > MVC5 の ASP.NET Identity の 2 要素認証で標準でサポートされているのは SMS と email によるものですが、それに代えて ASP.NET Core MVC の標準(?)の Google Authenticator App を使うということですね。 はい。そのようにしたいと思っています。
退会済みユーザー

退会済みユーザー

2021/10/21 03:48

Manage 画面で「2 要素認証」が「有効」になっている(DB の dbo.AspNetUsers テーブルの当該ユーザーの TowFactorEnabled フィールドが True になっている)でしょうか?
kawauso

2021/10/21 04:21

ご指摘いただいた個所を見落としておりました。 二要素認証を有効化することでGoogle Authenticator Appを用いた認証を行うことができました。 大変助かりました。ありがとうございました。
guest

回答1

0

自己解決

SurferOnWwwさんからご指摘いただいたようにManage画面の二段階認証を有効化していなかったためログイン後SendCode画面へ遷移しませんでした。

投稿2021/10/21 04:53

kawauso

総合スコア56

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問