2014-12-03 91 views
0

我已經設置了一個基於web的API來允許遠程應用程序獲取/發佈數據。每個API調用都使用用戶ID和密碼進行驗證,該用戶ID和密碼使用只有遠程應用程序和網站才知道的密鑰加密。此認證不僅確保用戶可以訪問該API,而且還允許我根據用戶的配置文件實現安全功能(即用戶A可以看到項目A & B,但不能看到項目C)。如何爲本地和遠程請求實現API安全性?

我希望我的服務器端網站頁面能夠通過AJAX調用遠程調用相同的API方法,但是,在代碼中存儲加密密碼看起來不正確,而且我的網站實現了一個「登錄爲」功能,這將不允許我設置加密密碼,因爲密碼不是以純文本格式存儲的。

對於不需要加密用戶密碼的遠程和「本地」調用實現API安全性的好方法是什麼?

回答

0

您不應該在服務器端代碼中存儲用戶名和密碼。遲早有人會盯着你的代碼,你的數據會變得脆弱。

但你也不應該在客戶端代碼中存儲祕密(密鑰)。你不應該假設你的客戶可以信任保守這個祕密。

給予用戶對項目A和B(但不是C)的訪問稱爲授權,並取決於您是否知道誰調用了您的API(驗證)。

您應該仔細研究身份驗證協議,如OpenID Connect和授權協議,如OAuth 2.0

另請參閱我對this問題的回答。

+0

只是爲了澄清,沒有祕密密鑰存儲可查看客戶端,密碼也不是以純文本形式存儲在任何地方。 – 2014-12-08 12:42:08

+0

即使您在客戶端加密它們,如果客戶端可以解密,那麼攻擊者也可以解密。安全令牌更安全,因爲它們只在有限的時間內有效,並且無需在客戶端存儲祕密。 – MvdD 2014-12-08 17:25:26

+0

對於簡單的AJAX調用,OpenId或Oauth是不是過度矯枉過正? – 2014-12-08 21:05:29