我試圖找到一種簡單靈活的方法將JaaS身份驗證添加到REST。我發現了一個post,我認爲它帶領我走向正確的方向(請參閱StevenC的回答)。聽起來像servlet容器負責安全性,而不是Jersey代碼本身。我喜歡這個想法,但需要一些實施指導。在澤西灰熊上使用JaaS
Grizzly是我的servlet容器,我想將其配置爲使用JaaS進行身份驗證。現在,一個簡單的用戶名/密碼組合就可以,並且直接在代碼中直接對用戶名/密碼對進行硬編碼是沒有問題的。只要它使用JaaS,我們可以稍後改進這些細節。至於通過HTTP發送的內容,我認爲存儲cookie是實現這一切的最簡單方法。無論如何都要將身份驗證垃圾從我的Jersey代碼中刪除。
下面的代碼到目前爲止開始灰熊:
final String baseUri = "http://localhost:9998/";
final Map initParams = new HashMap();
initParams.put("com.sun.jersey.config.property.packages",
"my.jersey.Service");
System.out.println("Starting grizzly...");
SelectorThread threadSelector = GrizzlyWebContainerFactory.create(baseUri, initParams);
System.out.println(String.format(
"Jersey app started with WADL available at %sapplication.wadl\n"
+ "Try out %shelloworld\nHit enter to stop it...", baseUri, baseUri));
System.in.read();
threadSelector.stopEndpoint();
System.exit(0);
如果這整個過程中的工作,有什麼檢查權限用戶的最佳方法是什麼?我可能會希望我的REST代碼在某些地方實際驗證權限。我是否在正確的軌道上?有更容易的方法嗎?鏈接到教程將是一個很好的答案。即使像「我做到了這一點,它的工作原理」這樣的答案,也會給我一個溫暖的模糊,我正朝着正確的方向前進。
感謝您的任何幫助。
編輯:一些澄清的StevenC的評論:
- 你仍想使用Servlet過濾器來保護您的資源?我將使用任何可以從Jersey代碼中分離出認證細節的東西。它不一定是servlet過濾器。
- 「配置爲使用JaaS」是什麼意思?最初的計劃是使用JaaS來保護當前的API。下一階段將使整個API在線提供。圍繞API調用使用Jersey包裝器似乎很有意義,但保持由Grizzly處理的認證。在我相信的時候,灰熊將不得不與JaaS互動。
- 您是否認爲應該有一些簡單的配置才能保護您的資源?我正在考慮對用戶進行身份驗證以及基於角色授權用戶訪問資源的兩個步驟。這個想法是讓Grizzly處理認證(使用JaaS)和Jersey處理授權。
- 「我不認爲需要使用帶有RESTful資源的Cookie。」刪除cookies的使用會很棒,但是如何完成?系統需要知道用戶是否被認證。我寧願不要求他們通過每個電話的用戶名/密碼/等。甚至在每次調用時將會話標記作爲參數傳遞都顯得很「醜陋」。
此外,請注意,我是REST的新手。我一直在做SOAP幾年,所以我可能會有一種「SOAP偏見」,可能會讓我不知道每個人都使用的簡單明瞭的解決方案。如果有更簡單的方法,請隨時分享。我只是儘量學習。
我也許應該張貼我的答案之前評論,但是這個問題需要一點澄清: - 你仍然想使用Servlet過濾器來保護您的資源? - 「配置爲使用JaaS」意味着什麼?你是否認爲應該有一些簡單的配置讓灰熊保護你的資源? - JaaS本身只是一個框架,你必須插入一些認證「領域」或來源(用LoginModule實現)。 - 我沒有看到使用RESTful資源的cookie的必要性(假設這是你想使用球衣的)。 – StevenC 2009-11-09 01:10:06
@ User1,你有沒有經歷過這個項目?我一整天都在撕掉我的頭髮,以獲得HTTP身份驗證工作。 (剛剛發佈了一個[類似問題](http://stackoverflow.com/questions/14608162/basic-http-authentication-with-jersey-grizzly)今天早些時候。) – aioobe 2013-01-30 19:55:04
我不認爲我得到它的工作。抱歉。我一直在用駱駝做Jetty。這是一個完全不同的範例,但對我的情況更好。作爲提示,我避免了HTTP身份驗證,並使用會話。用戶必須以某種形式登錄,然後將該會話授予適當的頁面。此設計適用於執行會話的任何HTTP服務器。 – User1 2013-01-30 21:25:50