在爲應用程序設計REST API時,某些服務應該是公開的,而其他服務則優先保持私有(即不公開訪問)。 OAuth由服務應用程序使用。限制對RESTful資源的訪問
有什麼措施要考慮?
心中的一些想法:
- 發佈下模糊的URI私人資源。
- 需要特殊訪問密鑰。 (僅由授權客戶知曉)。
在爲應用程序設計REST API時,某些服務應該是公開的,而其他服務則優先保持私有(即不公開訪問)。 OAuth由服務應用程序使用。限制對RESTful資源的訪問
有什麼措施要考慮?
心中的一些想法:
最具擴展性的方法是設計網址,以便讓中介知道哪些資源適用於所有人,哪些資源只適用於特定用戶,這是微不足道的。
然後,一個代理或servlet過濾器或任何適合您目前的需求可以做授權,阻止所有未經授權的請求。 實際服務現在可以盲目地信任和服務所有請求。
分離關切和所有。
例子:
身份認證的請求可達到:
/myapi/public
請求與用戶名 「joe」 的認證也可以達到:
/myapi/personal/joe
401未經授權:
/myapi/personal/anything_but_joe
中號ake sure/myapi/personal/otheruser和/ myapi/personal/nonexistentuser返回無法區分的回覆。
任何需要受到保護並受限於特定受衆羣體的資源都需要具備適當的訪問控制(基本上就是您在第2點討論的內容)。作爲指導,請參閱Twitter等成功服務的API,並且您始終會找到涉及的令牌。
混淆是永遠不會被接受的 - 這只是security through obscurity而且有根本的缺陷。閱讀OWASP Top 10,failure to restrict URL access的一部分。相同的規則適用於任何資源,無論它們是RESTful還是其他。
訪問控制應該先測量一下,深度安全將是一個很難猜測的URL。 – Ellead
幾乎沒有價值而代之以適當的訪問控制:「安全雖然隱晦是一個弱安全控制」:https://www.owasp.org/index.php/Avoid_security_by_obscurity –
是的,在這種情況下訪問控制將由OAuth令牌控制。只接受一組已知的密鑰。否則,我認爲404會滿足。 – Ellead
我不認爲這是正確的。 API應該圍繞HATEOAS進行設計,這意味着您的根URI的響應(它們應該是「書籤」的唯一URI)並不提供給定用戶無權訪問的URI的鏈接。如果您以管理員身份登錄,則會獲得由API返回的完全不同的鏈接集,而不是以某個特定用戶身份登錄的人員;如果您未經過身份驗證,您只能看到公共URI。 IMO這些URI應該只描述資源層次結構,而不是可見性。任何有權訪問該特定資源或Feed的人都應具有相同的URI。 –
「應該」我只是說如果你想創建一個RESTful服務,並獲得僅依靠鏈接關係而不是任何URI而不是書籤化的「根」URI的可發現性/健壯性優勢。如果你不做HATEOAS,你不會做REST - 只是一個HTTP API--如果你不需要這些好處並且不想做這些工作,那很好:) –