ページ

2012年3月13日

Windows/ApacheでNTLM認証

前回の「Linux/ApacheでNTLM認証」の続きです。前回はLinuxの話でしたが、今回はWindowsとApacheでのNTLM認証です。WindowsならIISが楽ですが、人間、楽ばかりしていてはいけません。

まず、Apacheを動かすWindowsサーバをADのドメインに参加させます。僕は、ドメインに参加済みのマシンをもらったので、どうやって参加させるか知りません。きっとWindowsなので簡単なんだと信じています。

モジュールのインストール

Linuxではmod_auth_ntlm_winbindを使いましたが、Windowsではmod_auth_sspiを使います。これ、Apache2.2用のモジュールでそれ以外のバージョンだと、自前でビルドしないといけないかも。最新版をダウンロードして展開します。

展開したファイルのINSTALLを読めばわかりますが、binディレクトリにあるファイルをApacheをインストールしたディレクトリのmodulesにコピーします。

Apacheの設定ファイル

次にApacheの設定ファイルを変更します。今回もバックエンドのTomcatに接続することを前提にします。まずは、モジュールをロードします。

LoadModule sspi_auth_module modules/mod_auth_sspi.so

そして、/hogeへのアクセスで認証されるようにします。


<Location /hoge >
  ProxyPass ajp://localhost:8009/hoge status=I
  ProxyPassReverse ajp://localhost:8009/hoge
  AuthName "Windows NTLM Authentication Test"
  AuthType SSPI
  SSPIAuth On
  SSPIAuthoritative On
  SSPIOmitDomain On
  require valid-user
</Location>


SSPIOmitDomainをOnにすると、Tomcatからはrequest.getRemoteUser()でユーザIDだけが取得できます。Off(デフォルト)だと、ドメイン名\\ユーザIDの形式でTomcatから認証ユーザの情報が取得できます。Linuxのmod_auth_ntlm_winbindと合わせるためにSSPIOmitDomainをOnにしています。

Tomcatの設定


Linuxと同じようにTomcatのserver.xmlのコネクターの設定でtomcatAuthenticationをfalseに設定します。
<connector port="8009" protocol="AJP/1.3" redirectport="8443" tomcatAuthentication="false">
これで、Tomcatからはrequest.getRemoteUser()でApacheが認証したユーザの情報が取得できます。

終わりに

Linuxと違ってWindowsは簡単ですね。ちなみに、mod_auth_sspiの設定の中にはSSPIMSIE3Hackとかあって、IE3って…。


0 件のコメント: