[Win2008β3]IIS7.0:Web.configを使用したWebサイトの設定 | Server OS Cafe

Server OS Cafe

Server OSの紹介等

さて夏休みも終わったので、久々にWindows2008ネタをやります。

前回 はapplicationHost.configでサーバー全体の設定を行ってみましたが、

各仮想ディレクトリ固有の設定はそのディレクトリ下のWeb.configに記述する事になっていますので

今回はこれを試してみます。

このWeb.configはASP.NETにあるWeb.configと全く同じもので、Web.configの中にASP.NETとIISの設定が

両方入ることになります。

また以前はVisual Studio2005の[ASP.NET 構成]で行っていたASP.NETのメンバーシップやSMTP電子メールの

登録がIISの管理ツールからも行えるようになっています。


■ テスト用WEBアプリ作成

  まずASP.NETで以下のWebアプリを作成します。

1. C:\inetpub\wwwroot下にWebSite1という名称でWebサイトを作成します。

2. default.aspxにはGridViewコントロールを貼り付け、SQL Server 2005上に作成したSALESデータベースの

ItemMasterテーブル(売上管理DBの商品マスターといったところです)よりデータを取得し一覧表示する

   ように設定します。


IIS_defaultaspx


3. Login.aspxを追加しこれにはLoginコントロールを貼り付けます。

これはフォーム認証の認証画面として使用します。

またHyperLinkコントロールも追加し文言を「パスワードを忘れた方はこちら」とし

リンク先を4の画面にします。


IIS_loginaspx

  この時点でWebSite1下のweb.configは以下のようになっています。

<connectionStrings>にある接続文字列"ConnectionString"はdefault.aspxのGridViewコントロールが使用する

接続文字列です。


<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings />
<connectionStrings>
<add name="ConnectionString" connectionString="Data Source=WIN2K8;Initial Catalog=SALES;User

ID=sa;Password=Win2k8Test" providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<compilation debug="false" />
<authentication mode="Windows">
<authorization>
<deny users="?" />
</authorization>
</system.web>
</configuration>


4. WebSite1の下にPasswordRecoveryというディレクトリを追加しその下にPasswordRecovery.aspxを追加し

それにPasswordRecoveryコントロールを貼り付けます。

これはパスワードを忘れた場合にパスワードの再発行を行う画面として使用します。


IIS_passwordrecoveryaspx

またこの画面には匿名認証で入れるようにする必要がある為、PasswordRecoveryディレクトリ下に

Web.configを追加し匿名認証を許可するように設定します。


PasswordRecovery下のweb.configはこの時点で以下のようになっています。

  <?xml version="1.0" encoding="utf-8"?>
  <configuration>
<appSettings />
<connectionStrings />
<system.web>
<authorization>
<allow users="?" />
</authorization>
</system.web>
</configuration>


■[インターネットインフォメーションサービス(IIS)マネージャー]での設定

5.[管理ツール]より[インターネットインフォメーションサービス(IIS)マネージャー]を起動して

WebSite1を選択し、[接続文字列]を選択します。


IIS_iismanager

2のGridViewコントロール貼り付け時に作成した接続文字列"ConnectionString"の設定が

ここでも見れます。


IIS_connectionstring

また"LocalSqlServer"という接続文字列も確認できますが、これはWebサイトへのユーザー追加に

使用されるデータプロバイダ"AspNetSqlRoleProvider"が使用する接続文字列で、デフォルトでは

WebSite1下にあるApp_DataフォルダにあるASPNETDB.mdfにアクセスするように設定されています。

で、このASPNETDB.mdfですが、SQL Server 2005 Express Editionがインストールされていれば

Visual Studio2005でWebサイトを作成した時に自動的に作成されるのですが、今回使用している

テスト環境ではSQL Server 2005のDeveloper Editionのみをインストールしている為、このファイルは

存在していません。

そこでSQL Server 2005上にUSERSという名称のデータベースを作成し、aspnet_regsql.exe を使用して

このデータベースをASP.NETメンバーシップの保存先にします。


aspnet_regsql

その上で接続文字列"LocalSqlServer"をUSERSデータベースにアクセスするように設定を変更します。


IIS_localsqlserver2

これによりWebSite1下のWeb.configの<connectionString>の設定が以下のように変わります。


.<connectionStrings>
<remove name="LocalSqlServer" />
<add name="ConnectionString" connectionString="Data Source=WIN2K8;Initial Catalog=SALES;User

ID=sa;Password=Win2k8Test" providerName="System.Data.SqlClient" />
<add connectionString="Data Source=WIN2K8;Initial Catalog=USERS;User

ID=sa;Password=Win2k8Test" name="LocalSqlServer" />
</connectionStrings>


6. 次に[.NETユーザー]を選択しユーザーの追加を行います。

この情報は6で追加したUSERSデータベースに保存されます。

    
   iis_adddotnetuser

7. [認証]を選択し"フォーム認証"を有効にします。


IIS_formauthorization

これによりWebSite1下のWeb.configの<authentication mode="Windows">が

<authentication mode="Forms">に変わります。

あとは手作業でフォームの情報を記述します。

<authentication mode="Forms">
<forms loginUrl="Login.aspx" defaultUrl="default.aspx"></forms>
</authentication>

8. 今度はWebSite1下のPasswordRecoveryディレクトリを選択して[SMTP電子メール]を選択し

PasswordRecoveryコントロールが使用する電子メールの設定を行います。


iis_addsmtpsetting

これによりPasswordRecoveryディレクトリ下のWeb.configに以下の設定が追加されます。

<system.net>
<mailSettings>
<smtp from="xxxxx@xxxx.co.jp ">
<network defaultCredentials="false" host="xxxx.smtp.xxxxx.co.jp" password="xxxxx"

userName="xxxxxxxxx" />
</smtp>
</mailSettings>
</system.net>

(本当はちゃんとしたメールアドレスやメールサーバー名、ユーザーID/パスワードが入っています)


■動作確認

9. Internet Explorerを使用しWebSite1にアクセスします。

するとフォーム認証にしているのでLogin.aspxが最初に表示されます。


IIS_dousakakunin1

今回はパスワードをど忘れしてしてまったことにして、「パスワードを忘れた方はこちら」をクリックします。


10. PasswordRecovery.aspxでユーザーIDを入力し、その後6のユーザー登録の時に設定した質問と回答を

入力します。


IIS_dousakakunin2

送信ボタンをクリックすると6のユーザー登録時に登録したメールアドレスに対して新しいパスワードが

記載されたメールが送信されます。


IIS_dousakakunin3

11.もう一度、Login.aspxを表示し、今度は10で取得した新パスワードでログインします。


IIS_dousakakunin4

12.ログイン成功です。


  IIS_dousakakunin5

このWeb.configを使用したサイトの設定に関してはマイクロソフトの以下のサイトにあるスクリーンキャストが

お勧めです。

Windows Developer Center:IIS7による機能のモジュール化