2011-07-04 177 views
4

我正在使用Apache Jersey構建一個RESTful Webservice。現在我希望你需要對它的一些請求進行認證。使用典型的REST方法,認證應該通過HTTP認證完成。但是一個帖子here提到了一個更好的方法是如何使用cookie。我認爲討論中有一些有用的觀點。 (如何)我可以使用Cookie來進行Jersey驗證嗎?我需要另一個框架嗎?在Apache Jersey中進行身份驗證而不使用Http身份驗證?

回答

6

Jersey使用封裝的Web應用程序的web.xml中聲明的身份驗證機制,實際上是HTTP身份驗證(通過SSL)或基於窗體的Cookie身份驗證。

如果要使用基於cookie的會話認證,用戶必須首先使用Web服務進行認證,以創建一個會話,該會話可用於檢查未來呼叫的身份。該servlet規範提供了一種標準化的方式來使用cookie和使用web表單進行會話進行身份驗證,但是這與web服務類型的應用程序不兼容。因此,您可能需要製作一些自定義解決方案,以便用戶通過發佈XML或JSON文檔來提交憑據。這種方法的一個問題是,如果用戶在沒有首先進行身份驗證的情況下或者在會話過期之後執行了對資源的調用,他們將需要重定向或接收某種類型的錯誤代碼。不是不可能的,但它增加了您的Web服務的複雜性。

此時您不得不懷疑,使用HTTP身份驗證不是Web服務樣式應用程序的更好選擇。我們最近使用Jersey和HTTP Auth作爲身份驗證機制構建了一個Web服務。然後我們在它上面建立一個Javascript前端。 Javascript客戶端總是向Web服務提交Authentication標頭,以便用戶永遠不會遇到來自瀏覽器的HTTP Auth認證窗口。也許是兩全其美。