客先から「192.168.1.134にdiget認証のrelmsを作成してください」と 相変わらずわけわかんない指令を受けたので、 「何かに使う『digest』認証を任意の『Realm』で設定」 と解釈して取り組みました。 一番簡単なFileRealm
でいいっしょ、 これは4848のGUIからRealms辿ってManage Users
ボタンからuser足せばいいし、 Digest Authは<auth-method>DIGEST</auth-method>
で瞬殺、 とか思ってたら、ハマりました。 index.html
とweb.xml
のみの最小構成でproof application作ったのですが、 どうしても認証できないのです。 server.log
見ると、
1
|
|
と言われています。えー!? 何で? 試しにBASIC認証にしてみると、(紆余曲折ありましたが要するに)通ります。 だから、keyfile
の書き方が悪いわけでは無いんですね。 勿論色々ググりました。が、なかなか出て来ません類似例。 辛うじて同じような症状があっても、Answerがついてません。 半日悩みました。 GlassfishのRealmって、 JAAS Contextを指定する必要があって、これは.../domains/domain/config/login.conf
で規定されているんですね。 これを見ると、 fileについてはfileRealm
は一つなのに、 jdbcについてはjdbcRealm
とjdbcDigestRealm
ってあるぢゃないですか。 をぉ、と思って、source treeを探してみると、 com.sun.enterprise.security.auth.login.DigestLoginModule
というのもあるんですね。 これどうやって使うんでしょうね。 使い方とかも例も、 JavaDocに書いてないしググっても出て来ませんでした。 試しにdigestRealm
なんてlogin.conf
に他のを真似して、 上のDigestLoginModule
を指定して作って使ってみたのですが、 fileから読み込むようにはなっていないようで、
1
|
|
と言われて失敗してました。 ...って、これabstract class
だから当たり前じゃないですか恥ずかしい。 DigestLoginModule
をextendsしてるのはJDBCDigestLoginModule
だけだから、 file realmで使うならJDBCDigestLoginModule
みたいなのを自前で作らないとならないんじゃないでしょうかね。 でもそうならどっかにそう書いといてよねー。
結局、大人しくjdbcDigestRealm
を使うように変更することで面倒を回避しました。 まぁ、それだけ世にDigest Authenticationのdemandがない、 という証左なのかなと思いました。
minimum web.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
WEB-INF/glassfish-web.xml
glassfishの場合は、以下のようにrole-name
とgroup-name
を結びつけるglassfish-web.xml
もないとダメでした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|