「アプリケーション アーキテクチャ ガイド 2.0」の実装 - Webアプリの認証と承認

アプリケーション アーキテクチャ ガイド 2.0 の [第 21 章: Web アプリケーションの設計] に
[設計に関する具体的な問題]という項目があります。

この「具体的な問題」に対する回答として、プログラムの実装はどうするのか? を調べてみました。

[設計に関する具体的な問題]にある11の問題のうち、今回は「認証」「承認」の実装についてです。

基本的な実装については、MSDNのチュートリアルをやってみればわかります。
以下、自分が参考にしたチュートリアルです。

チュートリアル: 基本的なユーザー ログインを使用する ASP.NET Web サイトの作成
・基本的な認証の仕組み。

チュートリアル : メンバーシップとユーザー ログインを使用する Web サイトの作成
・コントロールを使用してログイン、パスワードの変更やリセットのページを作成する方法。
・認証済みのユーザーのみ、特定フォルダ内のページへのアクセスを承認する方法。

チュートリアル : セキュリティ ロールに基づくサイトマップ ノードのフィルター処理
ASP.NET のロール管理と ASP.NET の URL 承認 の実装。

上記のチュートリアルでは、ロールのアクセス制御を
[ASP.NET Web サイト管理ツール]というWebページで設定していますが
実際のプロジェクトではテキストファイルで定義することが多いと思います。

そこでチュートリアル : セキュリティ ロールに基づくサイトマップ ノードのフィルター処理
で作成したソリューションを元に、ロールをWeb.configで定義する例を実装してみました。

以下、その実装方法です。

1.Adminロール、ユーザーを作成する。
[ASP.NET Web サイト管理ツール]で、「Admin」というロールを追加してください。
ユーザーを新規で作成し、「Admin」ロールとしてください。

2.Adminフォルダを作成する。
ソリューションに「Admin」フォルダを追加してください。
先に作成したAdminロールのみ、このフォルダ内のページにアクセスできるようにします。

3.Adminロール専用ページを作成する。
Adminフォルダ内に「SiteAdmin.aspx」を新規作成してください。
分かりやすいように、bodyタグないに「SiteAdmin」と書けばいいかと思います。

SiteAdmin.aspx
f:id:UnderSourceCode:20130504103148j:plain

4.Web.sitemap にAdminロール用の定義を追加。
siteMapNodeタグ内に、以下の定義を追加してください。

Web.sitemap
f:id:UnderSourceCode:20130504103206j:plain
roles="admin" で、Adminロールの場合しか表示しないノードであることを定義します。

5.Adminフォルダ内にWeb.configを新規作成する。

6.Web.configにAdminロールのみアクセスできるように定義する。
以下のようにAdminフォルダ内のWeb.configを編集してください。

Web.config
f:id:UnderSourceCode:20130504103219j:plain

以上で終了です。

実際に動かすと、以下のことが確認できるはずです。
・Adminロールのユーザーでログインすると、トップページのSitemapにSiteAdminが表示される。
・SiteAdminのリンクをクリックするとSiteAdmin.aspxに遷移する。
・Admin以外のロールでログインしSiteAdminのURLを直打ちするとログイン画面に遷移する。
  (Adminユーザー以外は拒否される)

ちなみにチュートリアルで作成したCustomers、EmployeesOnlyフォルダの中にも
Web.configは自動生成されており、フォルダに既存の項目として追加することも可能です。
f:id:UnderSourceCode:20130504103231j:plain
当然、このWeb.configを直接編集してロールのアクセスを管理することも可能です。