客先から「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 |
|