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