理系学生日記

おまえはいつまで学生気分なのか

忍者TOOLS

mod_auth_cookie (設定編)

前提を整える

まずばベーシック認証がきちんと動作していることを確認します.
テスト用のディレクトリを 2 つ作成し,それぞれ id/pass が test1/test1,test2/test2 しかアクセスができないようにします.

    <Directory "/var/www/basic-test1/">
        AuthName "Members Only"
        AuthType Basic
        AuthUserFile /etc/apache2/htpasswd
        Require user test1
    </Directory>

    <Directory "/var/www/basic-test2/">
        AuthName "Members Only"
        AuthType Basic
        AuthUserFile /etc/apache2/htpasswd
        Require user test2
    </Directory>

以下は一旦 /var/www/basic-test2 以下への Basic 認証を突破した test2 ユーザが /var/www/basic-test1/a.txt にアクセスしたときの HTTP リクエスト・レスポンスヘッダの一部.

GET /basic-test1/a.txt HTTP/1.1
Host: www.kiririmode.com
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ja-JP-mac; rv:1.9.0.5) Gecko/2008120121 Firefox/3.0.5
Authorization: Basic dGVzdDI6dGVzdDI=


HTTP/1.x 401 Authorization Required
Date: Sun, 21 Dec 2008 07:11:54 GMT
WWW-Authenticate: Basic realm="Members Only"

きちんと Basic 認証がかかっており,test2 ユーザはアクセスできないことが確認できます.

mod_auth_cookie の設定

Ubuntu (というか,Debian 系) だと,モジュールのロードを行うディレクティブは /etc/apache2/mods-available に置くのが一応のルールになっています.そこで,このディレクトリに auth_cookie.load というファイルを以下の内容で作成します.

LoadModule auth_cookie_module /usr/lib/apache2/modules/mod_auth_cookie.so

その後,auth_cookie_module を有効にします.

$ sudo a2enmod auth_cookie

次に実際の mod_auth_cookie の設定を行います.当面付け加えるのは AuthCookieName と AuthCookieOverride.それぞれの意味としては,以下のような感じです.

  • AuthCookieName: Basic 認証に使用する id と pass が設定されたクッキーの名前を指定する
  • AuthCookieOverride: リクエスト中の Authorization ヘッダと Cookie ヘッダの id/pass のうち,Cookie ヘッダのものを優先する

これら 2 つのディレクティブを,ぼくは default-ssl ファイルに付け加えました.

    <Directory "/var/www/basic-test1/">
        AuthName "Members Only"
        AuthType Basic
        AuthUserFile /etc/apache2/htpasswd
        Require user test1
        AuthCookieName idpass
        AuthCookieOverride On
    </Directory>

    <Directory "/var/www/basic-test2/">
        AuthName "Members Only"
        AuthType Basic
        AuthUserFile /etc/apache2/htpasswd
        Require user test2
        AuthCookieName idpass
        AuthCookieOverride On
    </Directory>