Tomcat レルムあれこれ

<< 戻る   トップ >>

Tomcat のレルムについていくつかの実験を行う。

UserDatabase Realm

BASIC認証を確認。この Realm については、以前 DIGEST/FORMについても動作を確認したような気がするので以下省略

JDBC Realm

はじめての UserDatabase 以外の realm である。まず、Tomcat 側の設定として、Context のrealm 設定を行う。Tomcat の logs/locahost.* を読むと動作不全の原因が解析できる。

  1. うっかり web.xml に <security-role>を書き忘れで失敗。
  2. mysql ドライバのインストールし忘れで失敗。いや、ドライバなしでも動くなかなぁ、と疑問には思ってはいたのだが。
  3. データベースの表のカラム名を role_name とすべきところを、roll_name として失敗。訂正して BASIC 認証は動作。DIGEST 認証も可。

FORM認証のなぞ

JDBC Realm による認証も、ずっこけたり擦りむいたりしながらなんとか動くようになったなあ、と思ったらなぜか FORM 認証だけがいうことを聞かない。そこでとりあえず UserDatabase Realm に戻って試してみたのだが、やはりダメだ。どうしたのだろう。

多少頭の中が混乱して来たので、順番に試してみる。まず、UserDatabase Realm - BASIC 認証。やはり期待した動作をしてくれる。

次に、同じく UserDatabase Realm - FORM 認証。うまくいかない、と思ったら <form> の action 属性を j_security_check をタイプミスしていた。とほほほ。このバグの、というかタイプミスで浪費した時間は 3時間に及ぶ。もう、ダメかな、自分。

このままではとても悔しいので、JDBC Realm - FORM 認証に変更してチャレンジ。うまくいくねぇ。

それでは、最終的な実験対象である JAAS Realm - FORM 認証。いや、実をいうと最終でもないのだが、とにかくこれを動かしてみよう、というわけである。

JAAS Realm

JAAS Realm は手強い。なにしろ "Tomcat ハンドブック" では JDK1.4 では動作が確認出来なかったということだ。まずとりあえず動かしてみてでるエラーは、catalina.out の「JAAS用に構成された LoginModules はありません」というメッセージだ。

  1. "Tomcat ハンドブック" pp.47-50 に従い、sever.xml および実験プロジェクトの web.xml を編集した。
  2. JAAS ログイン構成ファイルの位置については、ハンドブックとは異なり、$JRE/lib/security/java.scurity に次のように設定した。
    # login.config.url.1=file:{user.home}/.java.login.config
    login.config.url.1=file:{java.home}/lib/security/tomcat.login.config
    
    なお、コメントアウトはもともとコメントアウトされていたもので、今回コメントアウトしたわけではない。これで、JAAS ログイン構成ファイルは $JRE/lib/security/tomcat.login.config となったはずだ。
  3. $JRE/lib/security/tomcat.login.config をハンドブックにしたがって編集した。

うまくいかなかったので、ハンドブックに忠実に root/.java.login.config にコピー。だめ。さらに忠実に、JAVA_OPS を設定。それでもだめ。エラーメッセージの「JAAS用に...」というところが気になったので、root/.java.login.config の内容を次のように改めたところ、動作した。

JAAS {
        com.sun.security.auth.module.UnixLoginModule required;
};

めでたし。めでたし。

いや、めでたくはない。たまたま Context の名前を JAAS なんておめでたいものにしてしまったので話がややこしい。JAAS ではなく、JAASx にしたらどうなるか。予想通り、JAASx 用に構成された LoginModule がない、ときた。ならば、Realm の appName 属性を JAAS にすれば JAASx Context からもアクセス可能となろう。おお、予想通り。

さあ、あとは Tomcat ハンドブックに往時には動かなかったとされる BASIC 認証と DIGEST 認証の動作をチェックするです。

めでたいどころか、認証してない。誤った username/password ペアでも動く。なんだこりゃ。とにかく、このあたりの問題は明日に持ち越し。ちなみに、$JRE/lib/security/java.security での設定は有効らしい。このあたりも含めてあとは明日。だって、酔っ払いなんだもん。

というわけで本日、debug スイッチをいれて検証してみたが、どうやら「Tomcat ハンドブック」の記述どおり、動作はするのだがすべて認証する、という状況であるらしい。JDK1.4 のころと状況は変わっていない、ということなのだろう。なるほど、JPam の存在意義と言うものがわかる。

「Tomcat JAAS レルムによる認証実験」を改題

作成: 2007-10-02 14:59:23.0更新: 2007-10-04 11:27:42.0
http://museo-anonimo.jp/nanban/?id=561,http://museo-anonimo.jp/nanban/tr/561