ASP.NET Core Identity を理解する
このユニットでは、Identity のアーキテクチャについて理解を深めます。
ASP.NET Core Identity のアーキテクチャ
ASP.NET Core Identity は、ASP.NET Core Web UI にユーザー登録とサインインの機能を追加するメンバーシップ システムです。 メンバーシップ システムでは、認証と認可の両方の問題が処理されます。 認証は、ユーザーは誰であるか、ということに関係します。 認可は、ユーザーは何を行うことを許可されているか、ということに関係します。 そのため、認証は認可に対する前提条件となります。
ローカル アカウントの作成に代わるものとして、Identity では Facebook や Twitter などの外部サインイン プロバイダーがサポートされています。 ユーザー セッションは、Cookie ベースの認証を使用して保持されます。 既定では、Cookie がサインイン時に作成され、サインアウト時に破棄されます。
メンバーシップ データは、ユーザーが選択したデータ ストアとデータ アクセス テクノロジを使用して保持されます。 既定のデータ アクセス テクノロジは、Entity Framework (EF) Core と呼ばれるオブジェクト リレーショナル マッパー (O/RM) です。 既定のデータ ストアは SQL Server です。
基になるデータベースとの対話の複雑な部分は、EF Core によって抽象化されます。 したがって、通常、EF Core により、その任意のデータベース プロバイダーを Identity で使用できるようになります。 データベース プロバイダーは、SQL Server、SQLite、および他のいくつかのデータ ストアで使用できます。 また、Identity では、ユーザーが選択したデータ アクセス テクノロジを柔軟に使用することもできます。 Dapper は、代わりによく使用されるものの 1 つです。
次の図では、このモジュールで使用される Identity のアーキテクチャを示します。
前の図で:
- ASP.NET Core Razor Pages アプリは、このモジュールで Identity のサポートが追加される Web UI を表します。
-
Identity Manager レイヤーには、
Microsoft.AspNetCore.Identity
名前空間から使用されるクラスが含まれています。 このモジュールで明示的に使用される、そのようなクラスの例として、SignInManager<TUser>
やUserManager<TUser>
があります。 -
EF Core Identity Store レイヤーには、
Microsoft.AspNetCore.Identity.EntityFrameworkCore
名前空間からのクラスが含まれています。 このモジュールで暗黙的に使用される、そのようなクラスの例として、UserStore<TUser>
があります。 - "データベース プロバイダー" はデータベース固有のライブラリであり、"EF Core プロバイダー" (図には示されていません) から SQL を受け取って、それを実行します。
EF Core では、移行という機能を使用してデータベース スキーマを増分更新し、アプリのデータ モデルとの同期を維持します。 最初の EF Core の移行を適用すると、サポート データベース テーブルが作成されます。 次の図では、サポート テーブルのスキーマを示します。
Note
上の図は、データベース内のキーとリレーションシップを示しています。 キーが一で、無限大 (横向きの 8) が多となっています。 データベースは、一対一、一対多、および多対多のリレーションシップの種類となるように設定できます。 キーは一意です。 図には、これらの結合の作成方法とリレーションシップが示されています。
まとめ
このユニットでは、ASP.NET Core Identity アーキテクチャについて学習しました。 次のユニットでは、既定の ASP.NET Core Identity の実装を既存のアプリに追加します。