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