ASP.NET Core Identity には、次のような豊富な認証機能が提供されています。
- 個人のユーザアカウント認証
- Identity なしの Cookie 認証
- 外部プロバイダー認証(Facebook、Google、Microsoftアカウント、Twitter)
- Azure Active Directory
- Azure App Service 認証
などなど、その他に OSS 認証オプションなどもあります。
これを見ると大抵のことは、何でも出来そうです。けれど機能が豊富が故に、いざ実装しようと思うと、情報(理解しておくべき情報)が多くて混乱します。
そこで、今回は、ASP.NET Core Identity を理解する上で基本となる「個人のユーザアカウント認証」と「ASP.NET Core Identity を使わない Cookie 認証(以降、Cookie 認証)」に焦点を当てて、どんなユーザ機能が提供されているかを見ていきます。但し、今回は概略のため、認証に関連する Cookie、セッション、承認(フィルター)、電子メールプロバイダーといった細かな内容は触れません。具体的なユーザ機能を中心に紹介したいと思います。
個人のユーザアカウント認証
「個人のユーザアカウント認証」は、アプリがユーザを管理する構成です。つまり、ユーザの登録、編集、削除機能をアプリに実装してユーザを管理します。
繰り返しになりますが、もちろん Facebook、Google、Microsoftアカウント、Twitter のような外部認証プロバイダーもサポートされています。では、早速 ASP.NET Core Identity を使うと、どんな便利機能が簡単に実現できるのかを見ていきます。
簡単に実現できる機能
- 2要素認証機能
- アカウントロック機能
- パスワードリセット機能(ユーザが忘れた場合)
- パスワード構成機能
各機能を少し掘り下げてみます。
2要素認証機能
セキュリティ対策として効果的な2要素認証機能が簡単に実現できます。ユーザー名とパスワードを確認した後の認証には、時間ベースのワンタイムパスワードを使用します。
2要素認証としては、次の方法ような方法があります。
- メールアドレス
- SMS(Twilio、ASPSMS など)
2要素認証の流れのイメージ
ロックアウト機能
2要素認証と同様に、セキュリティ対策として効果的なロックアウト機能が簡単に実現できます。例えば、パスワードを5回間違うと、6時間ログインできないといった制御をすることが可能です。
ASP.NET Core Identity では、パスワードポリシーに従ってロックアウトを簡単に構成できます。
パスワードリセット機能
ユーザがパスワードを忘れてしまった場合をフォローするパスワードリセット機能を簡単に実現できます。
パスワード構成機能
パスワード強度の強制を簡単に実現できます。次のような項目を設定できます。
- 0-9 までの数値の強要
- 最小長の指定
- 小文字の文字の強要
- 英数字以外の文字の強要
- 個別の文字数の強要
- 大文字の強要
また、パスワードをハッシュ化するためのオプションも用意されており、デフォルトでハッシュ化された状態でテーブルに登録されます。
これらの機能を自前で実装しようとすると、かなり大変です。それを軽減して、且つ、セキュリティ対策も柔軟に実現できるのが、ASP.NET Core Identity のメリットです。
少し脱線しますが、IPA 独立行政法人が公開している「チョコっとプラスパスワード」のネーミングが面白かったので載せておきます。
Identity なしの Cookie 認証
ASP.NET Core Identity を使用しない場合は、認証 Cookie を使用します。例えば、ID と PW でログインするように実装して、認証に成功すればユーザ情報を認証 Cookie に保持します。ログイン以降のリクエストには、この認証 Cookie を使用して承認するかどうかで制御します。
ASP.NET Core Identity を使用すれば、どんなことが実現できるのかイメージが掴めたところで、次回は実現するための実装を紹介します。
- ASP.NET Core Identity の2要素認証と Identity を使わない Cookie 認証 – 概要編
- ASP.NET Core Identity 構成編
- ASP.NET Core IdentityとSendGridを使用したメールベースの2要素認証