2013-11-15 59 views
1

我使用Apigee作爲私有REST API的代理,該API允許在我的數據庫上進行基本的CRUD操作。前端開發人員想直接從JavaScript/Ajax調用我的API,所以我不能使用基本的API Key身份驗證,因爲任何人都可以查看JS的源代碼並在API上調用可能具有破壞性的方法(我是遠離原點的瀏覽器中的策略,但這不會阻止某人在瀏覽器之外進行卷曲並調用我的API)。如何保護在JavaScript/Ajax客戶端[apigee]中使用的API?

什麼是最好的方法?用戶通過身份驗證後,UI開發人員能否以某種方式使用OAUTH獲取每個會話的訪問令牌,並在他的Ajax調用中使用該令牌?但即使如此,該用戶無法查看JS源代碼並通過curl做一些令人討厭的事情嗎?

在此先感謝!

+0

任何瀏覽器都可以做,用戶也可以做。 – SLaks

回答

0

所以你想授權訪問者到你的第三方網站,並確保他們不能做任何虐待?

這裏沒有安全模型。一旦你授權用戶/會話/瀏覽器它是免費遊戲,他可以做任何他想做的事情。


因此,回到這裏,你想防止什麼濫用?也許你想阻止未知的第三方使用你的服務。在這種情況下,您可以在水下設置API密鑰身份驗證,爲您提供臨時會話密鑰。

有3方。用戶(u),使用您的API的第三方(3)和您(y)。

  • u請求從3
  • 3會話密鑰確實水下請求y與他的API密鑰
  • y驗證API密鑰,併發送回一個會話密鑰3
  • 3手中會議鍵爲u
  • u是否提供服務請求至y

如果3永遠無法獲得會話密鑰,您的服務對未知的第三方是安全的。

1

OAuth v2應該可以解決您的問題。 Apigee網站上有多篇文章和資源,討論何時最好使用OAuth v1與OAuth v2。 http://apigee.com/docs/content/apigee-oauth-frequently-asked-questions,三條腿的OAuth策略可能對您最有效:http://apigee.com/docs/gateway-services/content/oauth。在Apigee網站上有一個例子。

+0

我的API不是像Facebook那樣代表最終用戶請求資源的API。它更像是一個遠程後端數據訪問層,在我的產品模型和客戶模型中都有CRUD操作。一個操作可能是從數據庫中獲取一些與客戶無關的參考數據。鑑於此,是否仍有可能將這些服務訪問到Ajax代碼,或者我應該要求開發人員在Ajax和我的API之間創建一個圖層,以便無法從頁面源獲取API密鑰? – user2997003

相關問題