2012-11-26 134 views
2

我們打算開發基於rest的api。我探討了這個話題,但看起來,當你的客戶端是一個應用時,你可以保護api(所以有很多方法,公鑰 - 私鑰等)。對於網站/移動網站來說,如果我們在網站中訪問基於rest的api,而不使用任何登錄訪問內容(登錄將是可選的),那麼我們如何限制其他人訪問基於rest的api?如何保護基於Rest的API?

使用Oauth2.0有意義嗎?我不清楚這一點。

更清晰的問題可能是,我們怎樣才能保證GET或POST請求暴露在網絡的不使用任何登錄的網站的?

如果是簡單的GET請求或POST請求,這將返回特定的輸入JSON數據,現在我有移動網站,誰將會使用GET請求或POST請求來獲取數據訪問這些數據。那麼,其他人也可以訪問它,問題是我沒有使用登錄,用戶可以直接訪問數據。但是我們如何限制其他人訪問這些數據。

+0

「安全」是什麼意思?即你試圖防範什麼威脅? – ptyx

+0

好吧,這很簡單,獲取請求或發佈請求,這將返回給您特定輸入的json數據,現在我有移動網站,誰將訪問這些獲取請求或發佈請求以獲取數據。那麼,其他人也可以訪問它,問題是我沒有使用登錄,用戶可以直接訪問數據。但是,如何限制其他人訪問它,感謝您的回覆 – Pradeep

+0

要通過網站訪問,請參閱[REST身份驗證和公開API密鑰](http://stackoverflow.com/questions/5472668/rest-authentication-and-曝光 - 的-API鍵)。 – Arjan

回答

3

你認爲什麼是確保未使用REST VS一個正在使用REST API網站之間的區別?

的OAuth提供授權功能,爲您的網站,在REST架構,這意味着移動應用程序的用戶將被允許訪問該資源之前提供他們的憑據。然後應用程序可以決定該用戶是否有權訪問請求的資源。但是你說你的網站不需要使用授權。

您可以使用證書,但管理每個客戶端證書的好運。我認爲這是因爲你的解釋並不需要保護你的網站,因爲你將永遠無法管理客戶端和服務器之間的信任關係。有一些選擇,但:

  1. 你建立你船到的人,可以利用與客戶端打包證書與服務器驗證本身自己的客戶端應用程序。例如。如果您爲該設備構建iOS,則iOS具有此類功能。
  2. 你傳達你的REST API時提供下載在瀏覽器中「安裝」和使用的證書的能力
  3. 使用類似的握手協議,當客戶想使它說的第一個請求; '嗨,我可以聊天嗎?'服務器迴應'對於下一個X分鐘是肯定的,但是我們可以確保每次你告訴我一些事情YYYYYY'(你可以使用類似於SecureUDID或類似的設備,而不是iOS的其他設備)。

有可能是別人,但你得到的基本思路。同樣在我看來,如果您的資源不需要授權,那麼您無需保護該REST API。我可以通過您提供的REST API或功能來詢問您公開的數據類型嗎?這可能有助於提供更好的答案。

+0

嗨,數據是JSON格式,它將是json對象包含簡單的數據,如文本字段值,數字,對象的描述,這將填充在Web UI – Pradeep

+0

它是敏感數據? – ramsinb

+0

是的,因爲它將成爲網站的核心信息,如果這可以在沒有登錄的情況下訪問,這意味着任何人都可以使用我們的服務獲取數據,他們將發佈在他們的私人應用程序/網站 – Pradeep

1

您需要授權:只允許某些代理(移動客戶端)和/或用戶訪問這些API。

爲了解決這個問題,你需要鑑定:一種方法使服務器分不清誰是誰(或什麼),所以可以做出正確的決定。

提供某種形式的識別有很多不同的方式,取決於您對安全性的關心程度。

最簡單的是用戶代理字符串,特定於您的移動客戶端。但它可以很容易僞造。基於客戶端的'祕密'稍微難以僞造 - 在您的移動客戶端代碼中嵌入某種祕密或密鑰。你可以使它變得非常複雜和祕密,但正如ramsinb指出的那樣,你不能以這種方式獲得安全性,因爲它要求你能夠保證你與客戶端交付的祕密(它是代碼,算法或者任何其他花哨的構造)都不能被破壞或逆向工程。當你不控制客戶端時不會發生。

從那裏,3種選擇:

  1. 安全是不是真的需要,不要打擾
  2. 安全是不是真的需要,但你仍然要限制訪問您的API要麼合法用戶/代理商或準備好投入一些時間來打擊您的保護 - 與特定的用戶代理或客戶端嵌入的祕密 - 不要投入太多,因爲它不會阻止真正想要獲取它的人
  3. 安全是必需的 - 然後我不認爲有認證的方式,它是登錄/密碼,用戶特定(設備sp ),OpenID等等......不管怎樣,你都必須在某種程度上增加用戶的負擔,儘管你可以通過允許認證持久化(cookies,存儲....)來減輕這種負擔