IIS7.0のASP.NET統合機能

マイクロソフト畠山です。
既にRTMされた、Windows Server 2008に搭載されているIIS7.0のASP.NET統合機能ですが、どんな事に使えるかと調べていました。今日は、その中での発見を。実案件で使えるかは要件次第ですが。

PHPで動いているサイトに、ASP.NETのフォーム認証の機能が、開発無しで動きます!
参考: 統合 ASP.NET パイプラインでアプリケーションを拡張する

以下に前提と手順を。

[前提]

  • 認証情報は、ASP.NET 2.0の標準フレームワークをそのまま使う。ID管理は、標準で使えるSQL Serverを (aspnet_regiis.exeで作成されるものを)
  • 認証サイトは、IIS7.0とASP.NET2.0でホスティング
  • PHPが動作しているサイトは、IIS7.0に

[ポイント]

  • web.configで、<machine key>は、全IISで同一のものに。これでCookie暗号化/複合化のキーが共有されます

[手順]

  1. まずは、フォーム認証サイトを構築します。ここでは、特に特別なことはしません。
    参照: 簡単なフォーム認証を実装する
    以下、動作確認です。
    image
    image
    ※SQL Serverにユーザーデータを作成するのを忘れないでください。Visual Studioの管理ツールから作成するのが便利です。実際には、ASP.NETのMemberShipクラスで作成できますが。
    image
    image
  2. PHPのサンプルプログラムを作成します。ここでは、以下の様なシンプルなものを。
    ——- PHPソース ——————
  3. <html>
        <head>
            <title>PHP Test</title>
        </head>
        <body>
            <H1 >
    <?php echo ‘<p>Hello World</p>’; ?>
            </H1>
    <hr />
    <?php echo date(‘Y/m/d’); ?>
            <hr />
    <?php phpinfo(); ?>
        </body>
    </html>
    ———————————–
    以下、実行結果を。
    image

  4. IIS7.0の管理コンソールで、PHPをホストしているサイトを「Webアプリケーション」に変換。
    image
  5. そして、アプリケーションプールのパイプライン モードが、「統合」になっているものを選択します。
    image
    このまま実行しても、先のPHPの実行結果を同じです。
  6. 以下の様なweb.configファイルを作成し、PHPをホストしているWebアプリケーションに置きます。
    —————- web.configの内容 ——————–
  7. <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <system.webServer>
            <!– FormsAuthentication module を再登録します。 –>
            <modules>
                <remove name="FormsAuthentication" />
                <add name="FormsAuthentication" type=
                    "System.Web.Security.FormsAuthenticationModule" />
            </modules>
        </system.webServer>

      <system.web>
        <authentication mode="Forms">
          <forms
            enableCrossAppRedirects="true"
            loginUrl="http://localhost/IntegratedAuthentication/login.aspx&quot;
            defaultUrl="http://localhost/PHP/index.php&quot;
            />
        </authentication>

        <authorization>
          <deny users="?"/>
        </authorization>

        <machineKey
          validationKey="<最初のweb.configと同じもの>"
          decryptionKey="<最初のweb.configと同じもの>"
          validation="SHA1" />

      </system.web>

    </configuration>

  8. IIS7.0の管理コンソールで、PHPサイトのIIS上の「匿名認証」を無効にします。
    ※この設定も、上記web.configに含められるようです。私自身は調査中です。
    image

いかがですか?
勿論、これだけで全てを解決できるわけではありませんが、なぜ、IISにASP.NET統合モードが存在するのか?そのパワーを見た気がします。ここでは、IISのパイプライン処理に含まれている認証情報だけピックアップしてみましたが、その他でも活用できるものがあるかもしれませんね。

2008/2/15
マイクロソフト株式会社
畠山大有

広告

Windows Server 2008 – IIS7

マイクロソフト畠山です。
夏休みまっただ中ということで、皆さんも、いつもと違う場所で過ごされているものと思います。という私も、インターネット回線を引いていない実家へ「退避」する予定です(笑)。残念ですが、携帯の電波だけは来ているんですよね(笑)。おそるべし日本のキャリア!そして恐るべし日本の放送電波!こうした流通チャネルの整備をしっかりやる日本は、諸外国の情報が入ってくる会社にいると、本当に「恐るべし」なんですよ。皆さんもご存じの部分もあるでしょうが、各業界にわたって本当にそうなんです。

さて、今日もWindows Server 2008の機能について概略を。
この時期は細かいところを議論してもしょうがないのです。なぜなら「変更される可能性がある」と明確に言われています。このIIS7もBeta3でのServerCoreのロールにはなっていません。が、最新のCTPでは、なっているんです。ですので、ご自身が振り回されないためにも、まずはあまり方向性が変化しない「概略」を抑えていただいて、詳細については実際に利用するのが見えてきたところ、あるいは製品版が出荷されてからご確認いただくのが間違いがありません。といっても私もエンジニア魂が働いて、やたら細かいことを気にせざるをえないのですが。

IISも、相当使われています。Apacheというインターネットのデファクトに、名称は匹敵してきていますよね。IIS6では、等々緊急のセキュリティ更新プログラムは1つだけの様です。
注: 以下のサイトから「Internet Information Services 6.0」を選択してみてください。
http://www.microsoft.com/japan/technet/security/current.aspx
製品を選定する上でいくつか技術要件について皆さんも調査されると思いますが、この事実は結構大事ですよね。インターネットにおいて、セキュリティ対策というのは非常に大きな要素だと思いますが、IISは6.0ですでに非常に高いセキュリティを確保している、といえるのではないでしょうか?

それをさらに推し進めるのがIIS7.0で導入される「モジュール化」になります。具体的にいうと、exe、dllなどの物理ファイルがロール別に細分化され、目的にあった必要最低限のファイルしかインストール・有効化されなくなります。ということは、セキュリティのリスクが更に低減される可能性が高まる、といえますよね。

Beta3とはいえ、IIS7はすでにmicrosoft.comとで運用を開始しています。"Dogfood"という会社の仕事の一つでもあるのですが、とはいえ、世界でも有数のアクセス数を誇るサイトで運用を開始しているという事実は見逃せません。
皆さんも、いきなり本番で使う、というのはありえないと思いますが、手元のVistaにも入っているという事実もお忘れなく・・・
田辺茂也さんのBlogより:
http://blogs.technet.com/stanabe/archive/2007/06/19/it-s-time-to-consider-iis.aspx

IIS7セミナー:
http://www.microsoft.com/japan/seminar/lhs/beta3_seminar/t301/play.aspx

2007年8月13日
マイクロソフト 畠山大有