2008-10-27 230 views
12

我的工作有幾個要求REST服務:中授權REST請求

  1. 它必須是安全的。
  2. 用戶不應該能夠僞造請求。

我現在提出的解決方案是有一個自定義Authorization頭看起來像這樣的(這是同樣的方式,Amazon Web Services的工作):

Authorization: MYAPI username:signature 

我的問題是如何形成的簽名。當用戶登錄到服務中時,他們被給予一個祕密密鑰,他們應該能夠用來簽署請求。這將阻止其他用戶代表他們提交請求,但不會阻止他們僞造請求。

將使用此服務的應用程序是一個iPhone應用程序,所以我認爲我們可以在應用程序中嵌入一個公鑰,我們可以使用該公鑰來做額外的簽名,但這是否意味着我們必須擁有兩個簽名,一個用於用戶密鑰,另一個用於應用程序密鑰?

任何意見將不勝感激,我很想第一次得到這個權利。

+0

定義「僞造請求」。什麼實體創建非僞造的請求?它是客戶端軟件嗎? – Alexander 2008-10-27 20:42:25

回答

1

我認爲最簡單的方法是使用HTTPS客戶端身份驗證。蘋果的網站在這個主題上有一個thread

編輯:爲了處理授權,我將在服務器上爲每個用戶創建一個單獨的資源(URI),並且只允許該(經過身份驗證的)用戶操縱此資源。

編輯(2014):Apple在過去的六年中改變了他們的論壇軟件;線程現在在https://discussions.apple.com/thread/1643618

+0

這是如何阻止用戶僞造請求的? – jonnii 2008-10-27 15:35:36

+0

HTTPS客戶端身份驗證要求客戶端擁有有效的公鑰證書。除非你的意思是「僞造請求」,認證用戶以某種方式進行未經授權的請求,這是授權問題而不是認證問題。 – 2008-10-27 16:55:23

+0

這就是我試圖解決的問題,我更新了主題以反映這一點。你會如何建議授權有效請求? – jonnii 2008-10-27 17:29:12

8

答案很簡單:它不能這樣做。只要您將任何解決方案發送給最終用戶,他或她就可以隨時攻擊與之通信的服務器。這個問題最常見的版本是Flash遊戲中的高分列表作弊。通過在客戶端中嵌入某種加密並對代碼進行模糊處理,您可以使其更難 ......但是,所有編譯和混淆的代碼都可以反編譯並且不混淆。這只是你願意花費多少時間和金錢,同樣也是潛在攻擊者的問題。

因此,您的關注是而不是如何設法防止用戶發送錯誤的數據到您的系統。這是如何防止用戶損壞您的系統。您必須設計接口,以便由錯誤數據造成的所有損害僅影響發送它的用戶。