2011-01-12 35 views
12

我託管REST Web服務在Grails應用程序獲得了REST Web服務,使用Spring的安全,即:調用使用Spring Security從Android的

@Secured(['IS_AUTHENTICATED_REMEMBERED']) 
def save = { 
    println "Save Ride REST WebMethod called" 
} 

我是從Android應用程序調用它。 (呼叫無擔保服務工作得很好。)

要調用服務,我手動建立一個請求(HttpUriRequest)並使用HttpClient執行它。

我想知道的最佳實踐是什麼,以及如何實現它們......特別是,我應該:

  1. 執行一次登錄,檢索JSESSION_ID,再加入含有它變成一個頭每個後續請求的HttpUriRequest?
  2. 或(不知道我會怎麼連這樣做),包括登錄並直接密碼對每個請求,前述餅乾/服務器端會話

我想我可以選擇1的工作,但我不當然,如果Spring Security允​​許(2),如果這是要走的路......謝謝!

- 兼論,沒有我失蹤,會做這一切對我有什麼庫嗎? :)

回答

10

彈簧安全確實支持基本身份驗證和基於表單的身份驗證(在URL中嵌入用戶名/密碼)。

REST服務由會話通常在驗證每一個請求,不正常。默認的spring安全認證(假設你在3.x上)應該尋找基本的認證參數或表單參數(j_username和j_password)(格式爲http://you.com/rest_service?j_username=xyz&j_password=abc)。

將j_username/j_password手動添加到URL上,將它們添加爲post參數(我相信)或者設置基本身份驗證用戶名/密碼都應該用於對默認Spring Security攔截器進行REST服務的身份驗證,盒子。

我承認,我還沒有REST服務試過,但我清楚地記得正是這種閱讀的文檔和我一樣對春季安全基本頁面登錄同一最近。免責。

+4

感謝很多的答案,這是接近(思想幫助了很多),但沒有奏效開箱即用 - 我發表了一篇關於如何運作的文章:http://storypodders.com/dasBlog/2011/01/22/SecuringRESTServicesInGrailsWithSpringSecurity。aspx – Bobby 2011-01-22 18:27:13

9

我想你可以使用一個登錄,一勞永逸的獲得,一個令牌,它類似於如何OAuth的工作方法。

安全信道(HTTPS/SSL)的外側通過網絡發送的用戶名和密碼是一種可怕的想法。網絡上的任何人都可以嗅探您的請求包並查看明文密碼。

在另一方面

,如果使用令牌的方法,因爲該令牌字符串是隨機產生的,即使令牌被攻破,最壞的情況是有人可以使用該令牌訪問您的REST API。

另一種解決方案是通過ssl隧道(HTTPS)。其實我已經做了比較結果顯示:80個請求/分鐘(HTTPS)與300個請求/分鐘(HTTP)

相關問題