2

基本認証を使用して、安らかな Web サービスに取り組んでいます。Web xml には次のものがあります。

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Services</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>User</role-name>
    </auth-constraint>
</security-constraint>
<session-config>
    <session-timeout>1</session-timeout>
</session-config>

これは期待どおりに機能します。ユーザーは、サービスとやり取りするときにパスワードを入力する必要があります。

ただし、より RESTful な標準に準拠するには、セッションが作成されないステートレス サービスであるべきだと思います。つまり、リクエストごとにクライアントに資格情報を提供するよう強制したいと考えています。

web-xml で session-timeout を 0 に設定すると、これは「期限切れにならない」と解釈されます。これは、私が望むものとは正反対です。

セッションをすぐに無効にする簡単な方法はありますか?

4

1 に答える 1

7

<session-config> 要素はまったく必要ありません。

あなたが経験するのは、ブラウザーが認証プロトコルを実装する方法です。

簡単に言えば、基本認証 (RFC 2617) は次のように機能します。

  1. クライアントが何らかのリソースを要求します。
  2. サーバーは、リソースにセキュリティ上の制約があることを認識します。そのため、HTTP 401 "Authorization required" 応答を送信します。ヘッダーには次のようなものが含まれています...

    WWW-Authenticate: Basic realm="Protected"
    
  3. クライアントはリクエストを再送信しますが、今回はヘッダーにクレデンシャル (base64 エンコード) を含めます。

    Authorization: Basic dG9tY2F0OnMzY3JIdA==
    
  4. サーバーは、指定された資格情報に基づいて要求を認証し、要求されたリソースを送信します。

Web ブラウジングを人間にとって便利なものにするために、事実上すべてのブラウザーは、ブラウザーが閉じられるまで資格情報をキャッシュします。ブラウザでページをリロードするたびに、「承認」エントリがリクエストのヘッダーとともに送信されます。したがって、ブラウザーで Web サービスをテストする際に、資格情報を再度求められることはありません。

Firefox を使用すると、その動作を制御できます。Firefox が HTTP Basic Auth をすぐに忘れてしまうことについての議論を確認してください。

于 2013-01-16T20:58:45.073 に答える