我正在開始一個新項目,我們正在計劃構建一個平靜的後端和一個AJAX字體結尾。我將重點放在識別所有我擁有的資源以及各種HTTP動詞做什麼,它們的URI以及這些資源的JSON表示方式上來解決這個問題。如何爲REST後端/ Ajax設計認證和授權系統前端應用程序
我正在尋找確保後端的最佳設計。這是我考慮的設計清單。我正在尋找下面未列出的替代設計,以及優點,缺點建議。該系統將在Spring 3.0和Spring Security 3.0中實現,SSL將用於系統的許多部分,但不適用於所有的部分,所以一些請求可能來自SSL,有些可能不會。
選項1:使用HTTP會話
顯示標準的登錄屏幕,創建一個服務器端的會話,並讓Tomcat發回一個JSESSIONID cookie,並具有Ajax客戶端包括在每一個XHR請求JSESSIONID的cookie。由於以下原因,這個選項只是感覺是錯誤的。
- 的連接成爲全狀態這是對REST的規則
- 我希望能夠分裂bakcend成多個獨立的WAR文件,這意味着我可以對後臺多個HTTP會話,如果是這樣的那麼這種方法不起作用。儘管我不需要今天將後端分割爲多個應用程序的能力,但我更願意採用允許這種可能性的設計。
選項2:找到一個開源的基於Java的安全庫,這是否
除了春季安全我還沒有發現任何其他的Java類庫,任何建議高度讚賞。
方案3:儘量使用現有協議OAuth的一樣
在我在的OAuth非常簡單瞭解一下它似乎是專爲跨站點驗證,其中每個站點都有它自己的用戶數據庫。在這個系統中,我想要一個跨所有後端ajax服務共享的全局用戶數據庫。
選擇4:利用SAML和Shiboleth
此選項似乎超必殺以及非常複雜的設置和維護。
選項5:每個請求發送的用戶名和密碼
這需要用戶發送他們的用戶名和密碼與每個請求,這意味着前端AJAX應用必須存儲爲JavaScript對象的用戶名和密碼並且如果用戶離開頁面,則返回用戶名/密碼組合將會消失,並且用戶可能被迫再次登錄。我不希望前端嘗試將用戶名和密碼放入cookie中,因爲這將包含安全性。
選項6:實現自己的身份驗證/授權協議
創建一個REST服務,用戶可以提出自己的用戶名/密碼組合,然後回來和安全令牌,他們必須發回給服務每請求。安全令牌將由服務進行數字簽名並具有到期時間。該令牌只適用於大多數操作,高安全性操作需要新的登錄屏幕作爲確認操作的端口。
這種方法的問題是我不得不發明另一種安全協議,這看起來像是浪費時間。
我相信我不是唯一一個反對這個問題的人,我希望堆棧溢出社區可以指向一些我還沒有找到的選項和工具。
感謝您指出了Apache Shiro,我以前沒有聽說過它。 – ams 2011-02-14 04:46:41