2

我正在使用基本身份驗證來處理restful web服務。在Web XML我有以下幾點:REST服務基本身份驗證會話超時

<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中將會話超時設置爲0,則將其解釋爲「永不過期」,這與我想要的完全相反。

有沒有簡單的方法讓會話立即失效?

回答

4

根本不需要< session-config>元素。

您所遇到的是瀏覽器如何實現身份驗證協議。

簡單的基本身份驗證(RFC 2617)的工作原理是這樣的:

  1. 客戶端請求的一些資源。
  2. 服務器認識到資源有安全限制。因此它發送一個HTTP 401「需要授權」響應。首標包含類似...

    WWW-Authenticate: Basic realm="Protected" 
    
  3. 客戶端重新發送它的請求,但此時具有在報頭中,例如憑證(base64編碼) ...

    Authorization: Basic dG9tY2F0OnMzY3JIdA== 
    
  4. 服務器根據給定的憑證驗證請求併發送請求的資源。

爲了使網頁瀏覽方便人類幾乎直到瀏覽器被關閉,每一個瀏覽器緩存的憑據。每當您在瀏覽器中重新加載頁面時,「授權」條目都會與請求的標題一起發送。因此,在使用瀏覽器測試Web服務時,不會再要求您提供憑據。

使用Firefox,您可以控制該行爲。查看關於Firefox quickly forget HTTP Basic Auth的討論。

+0

這被配置爲一個cookie,使得用戶瀏覽時無需爲每個請求提供憑據。您可以指定此Cookie /會話應該有效的時間。 –