- PR -

BASIC認証をクリアしたい

投稿者投稿内容
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-05-18 17:46
引用:

未記入さんの書き込み (2005-05-18 17:15) より:
おそらく無理です。多くのブラウザは 401 を受け取ったら記憶している Authorization ヘッダを自動的に送出してしまうでしょう。406 が返ってくれば認証情報を破棄する可能性はあるかもしれないですけど。


IE4までは、401が帰ってきてもキャッシュの情報を渡していたようですが、IE5からは再度
ログイン情報を入力させるように変更されているようです。
http://support.microsoft.com/default.aspx?scid=kb;ja;413854

どちらにしても確認は必要だと思いますし、ブラウザ依存の動作を前提とするのは好ましい
ことではないと思います。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-05-18 17:47
引用:
おそらく無理です。多くのブラウザは 401 を受け取ったら記憶している Authorization ヘッダを自動的に送出してしまうでしょう。406 が返ってくれば認証情報を破棄する可能性はあるかもしれないですけど。



あれ ? 既にログイン ( 認証情報をブラウザが記憶 ) している状態での話ですから、401で認証情報破棄にはなると思いますが。
※ Authorization を含んだリクエストに対して、401を返すという話。

扱いとしては、パスワード入力間違いで 401が来る ( 結果パスワード再入力 ) のと同じかと。

ちなみに、401の説明(RFC2616 10.4.2訳)によると、
引用:
もしリクエストがすでに Authorization credentials を含んでいるのであれば、この 401 レスポンスは認証がそれらの credentials に対して拒否された事を示す。


とありますし。

追加:
先に ukさんが IE の例を挙げられてましたね。
MicroSoft の説明を見る限りだと、「一回通った認証はずっと有効でないとイヤ」だけど、そうでないサイトがあるので、401が来たら認証情報を破棄するように修正した…と読めますね。
認証を弄ぶのは危険ですかね ? そこらへんの根拠が今一はっきり分かりません。

[ メッセージ編集済み 編集者: angel 編集日時 2005-05-18 17:56 ]
田中
ベテラン
会議室デビュー日: 2002/05/08
投稿数: 54
投稿日時: 2005-05-18 18:07
タイトルがいけないのだと思いますがどうも話の方向が違うように思います。

私が質問したいのはHTTPレベルのBASIC認証ではなく、TOMCATが標準で提供しているBASIC認証の機構についてです。
当然、TOMCATも最終的にはRFCに準拠した実装となっていることはわかりますが、今、問題にしているのはそのことではありません。

ある程度の決着をみたら話を戻していただけるとありがたいのですが。

一応、BASIC認証のために私が取った手段を書いておきます。

1.web.xmlで保護されるリソースとアクセスできるロールを指定する。
2.JDBCRealmの設定でユーザテーブル、ロールテーブル(OracleDB)の指定をする。
3.struts-config.xmlの<action-mappings>で保護したいリソースのパスを上記1で指定したパスにする。

以上のことをすれば保護したいリソースにアクセスする時にTOMCATが勝手にBASIC認証をしてくれますが、認証後にそれを破棄する(再度ログインダイアログが出るようにしたい)方法が知りたかったのです。


がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2005-05-18 18:11
がるです。
えっと…ちっと書くかどうか迷ったのですが。
正直なところ
"ログアウトが必要であるような要件でBasic認証をチョイスしてはいけない"
と思うです。
# 「毎回」「平文で」パスワードが流れる認証ってどうなんでしょ?

いあ。大前提を根底から覆すような発言なので書こうかどうか悩んだのですが。
せっかくのJavaですし(この場合は「大量にさまざまなクラスを所持している」
の意)。
通常の、Basic認証ではないもうちょっと「まっとうな」認証方式を
いろいろと調べたほうがよいように思うのですがどうでしょうか?

もしこの発言を蛇足、あるいはジャンクであると感じられるようであれば、
このような(前提を覆す)発言をしたことをお詫びいたします。

田中
ベテラン
会議室デビュー日: 2002/05/08
投稿数: 54
投稿日時: 2005-05-18 18:27
引用:

通常の、Basic認証ではないもうちょっと「まっとうな」認証方式を
いろいろと調べたほうがよいように思うのですがどうでしょうか?



たしかに・・・

勉強をStrutsの勉強を始めたばかりで本のサンプルを元に動けば良いという考えで開発してましたがセキュリティ上は危険ですね。
たまたまサンプルがBASIC認証だったのでそのまま使っています
また、そもそも認証をさせる目的が他にあります。

ということで、BASIC認証の選択の是非はこの際問わないで下さい。

※BASIC認証が危険なことを忘れていました。
今回の指摘がなければ重要な局面でも使っていたかも知れないので感謝します。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-05-18 18:53
引用:

田中さんの書き込み (2005-05-18 18:07) より:
私が質問したいのはHTTPレベルのBASIC認証ではなく、TOMCATが標準で提供しているBASIC認証の機構についてです。


えーと、だから401を返すように実装しろ、という流れになっているのですが…
コードを書かずに実現したいということですか?
aa
ぬし
会議室デビュー日: 2004/01/08
投稿数: 299
投稿日時: 2005-05-18 21:28
引用:

がるがるさんの書き込み (2005-05-18 18:11) より:
"ログアウトが必要であるような要件でBasic認証をチョイスしてはいけない"


今までの皆さんの書き込みを読みますと、これにつきると思います。
ログアウトにこだわりたいなら、やり方を変えた方がいいでしょうね。

ログイン時にセッションにアカウント名か何かを埋め込み、ログアウト時にその何かを消すというのが一般的?
#それでもブラウザで別ウィンドウを表示させたときとかの動作がブラウザによって違うという話を聞いた事があるけど。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-05-18 21:58
引用:

aaさんの書き込み (2005-05-18 21:28) より:
ログイン時にセッションにアカウント名か何かを埋め込み、ログアウト時にその何かを消すというのが一般的?


普通はセッション維持の手段としてURLにセッションIDを埋め込むか、クッキーのどちらかを
使いますが、アプリケーションサーバがその手段を提供してくれますので、ログアウト処理は
HttpSession#invalidateを呼び出すだけです。

スキルアップ/キャリアアップ(JOB@IT)