独自の認証処理の実装イメージ
本連載ではこれまで、Visual Studioによって生成される標準テンプレートを活用し、GUIアプリケーションにおけるASP.NET Identityにできることの紹介を、一通り行ってきました。テンプレートによって生成されたコードでは、データストアにSQL Serverを使用し、そのデータアクセスにEntity Frameworkを利用しています。
例として、ログイン時のユーザー情報取得処理の流れを見てみてみましょう(図1)。LoginページにてUserManagerExtensionsクラスのFindメソッドを通じて、ApplicationUserManageクラスのFindAsync非同期メソッドにユーザー名とパスワードを渡して呼び出します。UserManagerクラスでは内部に持つUserStoreクラスを使ってユーザー情報を取得します。この時、UserStoreクラスはEntity FrameworkのApplicationDbContextオブジェクトを使用します。
第1回でも述べたとおり、ASP.NET IdentityではSQL Server以外のデータストアへの対応が容易になっています。また、データアクセスにEntity Frameworkを使わないといけないということはありません。
ユーザー認証処理をカスタマイズする際のイメージを図2に示します。
一番の違いは、実際にデータストアに対するユーザー情報の操作指示を行うUserStoreクラスを独自に実装し、FindByNameAsyncメソッド、GetPasswordHashAsyncメソッドの動作をカスタマイズしていることです。こうすることで、ユーザー名を指定してユーザー情報を取得し、取得したユーザー情報のパスワードと画面で入力したパスワードが一致するか検証できるようになります。
このほかにユーザー作成等のメソッドも実装すれば、好きなデータストアを使ったユーザー情報の管理を行えるようになります。
今回はユーザーの認証に対象を絞り、その実装方法を紹介していきます。
必要なNuGetパッケージの導入
それでは、実際に独自の認証を行うWebフォームアプリケーションを作成していきましょう。まずは、実装対象を明確にするため、空のWebフォームアプリケーションとして新たにWebアプリケーションプロジェクトを作成してください。
プロジェクトを作成して最初に行うのは、NuGetパッケージのインストールです。ASP.NET Identityをカスタマイズして使用するには、次のパッケージをインストールします。
Microsoft.AspNet.Identity.Owin
ASP.NET IdentityのOWIN関連のライブラリを導入します。このパッケージをインストールすることにより、ASP.NETのコア部分やOWINのパッケージも一緒にインストールされます。
Microsoft.Owin.Host.SystemWeb
ASP.NET IdentityはOWINのミドルウェアを活用します。そのため、OWINをホストするためのパッケージも必要です。このパッケージはOWINをIISでホストするためにインストールします。
Microsoft.AspNet.FriendlyUrls
ASP.NET Identityとは直接関係しませんが、URLルーティングを楽に行うためにインストールします。