IIS 7 で自由な認証画面を
先日、日本独自の IIS 技術ポータル 『IIS TechCenter』 が公開されました。
『IIS TechCenter』
https://technet.microsoft.com/ja-jp/iis/default.aspx
だからというわけでもないのですが、以前所属していたチームブログに書いていた IIS 関連の記事で、資料性のあるものを再投稿していこうと思います。
第一弾としては、IIS 7 上の Web サイトに ASP.NET のフォーム認証を適用する方法についてです。
さて、ASP.NETフォーム 認証ってなに? という方もいると思うので簡単に説明しておきましょう。
ASP.NET フォーム認証とは、ASP.NET アプリケーションにそれ独自の認証処理を実装するための仕組みです。
この ASP.NET 認証は、アプリケーション ( 仮想ディレクトリ または Web サイト) 単位でアカウントベースを持たさせることが可能であるため、コンピューターや Windows ドメイン上にいちいちユーザーアカウントを作る必要もなく、また、ログオン画面なども自由に作成できるという、非常に小回りがきいて便利なものでした。
しかし、惜しむらくは、前バージョンの IIS では、ASP.NET フォーム 認証によるアクセス制御は ASP.NET が管理するファイル (拡張子が aspx とか ascx とか ashx とか) にしか有効ではありませんでした。
つまり、ASP.NET アプリケーションに ASP.NET フォーム認証を適用しても、アプリケーション内の ASP.NET で管理されないファイル (拡張子が htm とか jpg とか gif とか) に対して、直接 URL を指定された場合は、そのアクセスを制御することはできなかったのです。
IIS 7 では機能のモジュール化に伴うパイプラインの変更により、ASP.NET フォーム認証を使用して ASP.NET 以外のファイルに対してアクセス制御を行えるのはもちろんのこと、ASP.NET アプリケーションを作成しなくてもその機能を IIS7 の認証方式の一つとして使用することができます。
つまり、*.html や *.jpg といった静的なコンテンツにはもちろんのこと、PHP 等の ASP.NET とは違うランタイムで動作する Web アプリケーションに対しても、完全後付けで ASP.NET 認証の仕組みと、認証画面を追加することができるのです。
もちろん、既存アプリケーションのコードの変更は一切必要がありません。
また、認証ベースを格納するファイルは、既定では Web アプリケーションのフォルダ内の App_Data フォルダ内に格納されため、配布する際には、アプリケーションと一緒に配布することができます。
つまり、Web アプリケーションの配布先で、いちいちユーザーを作成し直す必要が無いのです。
なお、ASP.NET 認証は、設定手順はことなるものの FTP サイトにも適用することが可能です。
今回は、Web サイトへの ASP.NET 認証の具体的な手順を以下に記述します。
IIS 7 に ASP.NET 認証を適用する方法
準備
====
- SQL Server をインストール(※1)
- IIS の追加セットアップで [フォーム認証]、[URL 認証] (※2)をインストール
- login.aspx を作成し、目的の仮想ディレクトリに配置
※1: DB への接続文字が既定で Express Edtion のものになっているので、初めは Express Edtion を入れておくのが良いでしょう。もちろん、接続先を任意で変更も可能です。
※2: Windows Server 2008 では R2 βも含め [URL 承認] となっています。
login.aspx の内容
-------------------------
<html>
<head>
<title>Login to my web page</title>
</head>
<body>
<form runat="server">
<asp:Login runat="server" />
</form>
</body>
</html>
設定手順
========
- [スタート] ボタン – [コントロールパネル] – [管理ツール] から [インターネット インフォメーション サービス(IIS) マネージャ] (※以下 [IIS マネージャー ] と表記) を起動
画面左のツリーを展開し、目的の Webサイト、もしくは仮想ディレクトリを選択
仮想ディレクトリのアイコンがフォルダアイコンの場合は、マウスの右ボタンをクリックし、表示されたコンテキストメニューより [アプリケーションへの変換] を選択
.NET ユーザーの作成
- 画面右の [機能ビュー] より [.NET ユーザー] をダブルクリック
- [.NET ユーザー] 設定画面の右 [操作] パネルから [追加...] リンクをクリック
- [.NET ユーザーアカウントの詳細] 画面が表示されるので各項目に適切な値を入力し [OK] ボタンをクリック
フォーム認証の有効化
- [機能ビュー] より [認証] アイコンをダブルクリック
- [認証] の設定画面が表示され、使用可能な認証方式の一覧が表示されるので、”フォーム認証”、”匿名認証” を “有効” に設定し、他は “無効” に設定
- 認証方式の一覧の “フォーム認証” 上でマウスの右ボタンをクリックし、表示されたコンテキストメニューより [編集...] を選択
- [フォーム認証設定の編集] ダイアログボックスが表示されるので、同ダイアログボックスの [ログイン URL] の内容が “login.aspx” になっていることを確認
認証規則の設定
- [機能ビュー] より [認証規則] アイコンをダブルクリック
- [認証規則] の設定が面が表示されるので、画面右の [操作] パネルから [拒否規則の追加...] リンクをクリック
- [拒否の認証規則の設定] ダイアログボックスが表示されるので、[この Web コンテンツのアクセスを拒否する : ] の項目で、オプションボタン ”すべての匿名ユーザー” にチェックを付け [OK] ボタンをクリック
web.config ファイルの編集
- エクスプローラーを使用して目的の仮想ディレクトリの物理パスにアクセス
- web.config ファイルをメモ帳でオープン
- 要素に <modules> 要素があるか確認し、なければ <system.webServer> 下に追加
- 要素内を以下のように設定
<modules> <remove name="FormsAuthentication" /> <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" /> </modules> 設定を行った仮想ディレクトリ内のコンテンツにアクセスし、ログイン用ダイアログボックスが表示されるか確認
作成した .NET ユーザーの情報をログイン画面に入力し、ログインすることが可能か確認
以上で設定は完了です。
ブラウザから目的のコンテンツにアクセスし、以下のような認証画面が表示されるか確認してください。
認証画面が表示されたら、次に作成した .NET ユーザーのアカウント情報を使用してログオンし、目的のコンテンツが表示されるか確認してください。
次は FTP サイトへ ASP.NET 認証を適用する手順について書きたいと思います。