【初心者向け】ASP.NET Core Identity – 構成編

オウルです。

前回の「ASP.NET Core Identity の2要素認証と Identity を使わない Cookie 認証 – 概要編」では、ユーザ機能を中心に紹介しました。今回は、そのユーザ機能を実現するために必要な、「ASP.NET Core Identity の構成」について紹介します。

ASP.NET Core Identity

プロジェクト作成

まず最初に、ASP.NET Core MVC プロジェクトを作成します。

ASP.NET Core アプリケーションのプロジェクトを作成

Visual Studio 2019

Web アプリケーション(モデル ビュー コントローラー)

[ 認証の変更 ] ボタンをクリックして、「個別のユーザアカウント」に変更します。

Visual Studio 2019
 

プロジェクトの構成

作成したプロジェクトは、次のような構成になっているはずです。

Visual Studio 2019
 

ASP.NET Core Identity データベースを初期化

次にパッケージマネジャーコンソールから Update-Database コマンドを実行して ASP.NET Core Identity データベースを初期化します。

Visual Studio 2019
 

これで、ASP.NET Core Identity を構成するための下準備ができました。

ASP.NET Core Identity を構成

ASP.NET Core Identity をサービス再利用可能なコンポーネント)として StartUp.cs ConfigureServices メソッド内で登録します。これにより、DI を介して、例えば Controller で利用できます(Controller のコンストラクターへサービスの”挿入”

それでは、Startup.cs ConfigureServices(IServiceCollection services) にコードを追加して ASP.NET Core Identity を使えるようにしていきます。

データベース コンテキスト

プロジェクト作成時に Data / ApplicationDbContext.cs が作成されています。また、Startup.cs ConfigureServices にデフォルトで次のコードが用意されています。

ApplicationDbContext クラスは、IdentityDbContext クラス(Identity に必要な Entity Frameworkデータベースコンテキストの基本クラス)を継承しています。

Identity サービス

デフォルトで AddDefaultIdentity が呼ばれ、Identity をサービスに追加しています。

IdentityErrorDescriberJP

では、AddDefaultIdentity メソッド内を簡単に紹介します。

AddDefaultTokenProviders

パスワードのリセット、電子メールの変更、電話番号の変更操作、および2要素認証トークンの生成に使用されるトークンの生成に使用されるデフォルトのトークンプロバイダを追加しています。

AddDefaultUI

ASP.NET Core 2.1 以降では、Identity は、Razor クラスライブラリとして提供されています。どういうことか、現在の状態でデバックしてみましょう。

[ 登録 ] リンクをクリックして表示されたページのURLを確認すると・・・表示されたパスの cshtml ファイルがプロジェクトに見当たりません。前述の通り Razor クラスライブラリとして提供されているためです。では、この Register をオーバーライドするということで、Identity をスキャフォールディングしてみます。

Register

Identity をスキャフォールディング

ソリューションエクスプローラーのプロジェクトを右クリックしてメニューから「新規スキャフォールディングアイテム」を選択します。次に左のツリーから「ID」を選択します。

Visual Studio 2019

次にオーバーライドするファイルを選択しますが、ここでは「Login」「Logout」「Register」を選択して、データコンテキストクラスに「ApplicationDbContext」を指定してみましょう。

Visual Studio 2019
Visual Studio 2019

Identity UI を完全に制御

Razor クラスライブラリ を使用せずに、Identity UI を完全に制御したい場合は、AddDefaultIdentity の代わりに、次のコードを追加して Controller 及び View を実装します。

IdentityOptions の構成

ASP.NET Core Identity では、ユーザのパスワードポリシー、ロックアウトなど既定値の設定が使用されます。なので作成したプロジェクトの Startup.cs には IdentityOptions の構成コードがありません。ここでは既定値を上書きする方法を紹介します。

ユーザ情報は、AspNetUsers テーブルに格納されます。このテーブルで、パスワード、ロックアウト、2要素認証の有無などを管理します。次回ユーザ作成・更新・削除を紹介したいと思います。

Microsoft ASP.NET Core: パスワードオプション
Microsoft ASP.NET Core: ロックアウトオプション

認証 Cookie の構成

AddDefaultIdentity メソッド内の AddIdentityCookies のソースを見ると説明に ”Adds cookie authentication.”とあるので、ASP.NET Core Identity で使用する Cookie を以降、ここでは、認証 Cookie と呼びます。

ASP.NET Core Identity では 認証 Cookie を使用します。ユーザのパスワードポリシー、ロックアウトと同様に既定値が使用されますが、ここでは上書きする方法を紹介します。

注意事項

AddDefaultIdentity、AddIdentity はメソッド内で認証 Cookie の既定値を構成しているため、その後で認証 Cookie の構成を呼び出す必要があります。

github CookieAuthenticationOptions: 規定値

因みに、Identity モデルのカスタマイズやユーザーストアをカスタマイズをすることが可能です。

Microsoft ASP.NET Core: Identity モデル
Microsoft ASP.NET Core: ユーザーストア

セッション管理の構成

ついでにセッション管理の構成もあわせて。Redis を利用したセッション管理を次の記事で紹介しています。

ASP.NET Core Identity を有効化

ASP.NET Core Identity の構成が完了したので、ASP.NET Core Identity をアプリ内で有効にします。といってもデフォルトで認証ミドルウェアを要求パイプラインに追加するコードが用意されています。

ミドルウェア コンポーネントを追加するにあたり、公式のドキュメントの ミドルウェアの順序 にもありますが、「順序は、セキュリティ、パフォーマンス、および機能にとって重要」ってことを覚えておくといいですよ。

ASP.NET Core Identity の構成以外に2要素認証用のメールサービスなどが必要となりますが、それは次回ということで。ひとまず ASP.NET Core Identity の構成は完了です。

「【初心者向け】ASP.NET Core Identity」シリーズ
  1. ASP.NET Core Identity の2要素認証と Identity を使わない Cookie 認証 – 概要編
  2. ASP.NET Core Identity 構成編
  3. ASP.NET Core IdentityとSendGridを使用したメールベースの2要素認証
「【初心者向け】JWTトークン」シリーズ
  1. JWTトークンを使用してASP.NET Core APIをセキュアにする

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA