2016-08-04 116 views
0

我有一個私有API,我在那裏使用基本身份驗證作爲我的安全層。現在我的iOS應用程序使用API​​,因此沒有人能夠看到密鑰對。使用Javascript進行基本身份驗證而不公開密鑰對

我現在製作在Web相同的應用程序,使用反應,Javascript和需要使用基本身份驗證消耗相同的API。

我如何在JavaScript中使用我的API密鑰對,而不該密鑰對暴露給公衆?這樣的事情甚至可能嗎?

+0

你給每個用戶自己或把某些東西在他們就像一個反向代理的API之間 – Deryck

回答

1

正如@Andrew提到的,這是不可能的,你可以只是使它更難獲得,但它會在某個地方在那裏上的客戶端代碼,而這足以說你曝光。

如果你打開的替代品,我建議你使用每用戶身份驗證的第一個請求,然後再請求基於令牌的認證。該令牌可以是JSON Web Token,它是我談論的流動:

diagram

這是它的工作方式,從JWT's official documentation採取:

在身份驗證,用戶在成功在使用他們的 憑據登錄,一個JSON網絡令牌將被退回,並且必須保存在本地 (通常在本地存儲,但餅乾也可以使用),的 代替C的傳統方法在 服務器上關閉會話並返回cookie。

每當用戶想要訪問受保護的途徑和資源,在 用戶代理髮送的智威湯遜,通常使用承載模式 Authorization頭 。標題的內容應該像 如下:

Authorization: Bearer <token> 
+0

感謝您提供明確的答案和我能做的事例。我正在使用Firebase進行用戶身份驗證,並想知道是否可以使用OAuth對我的API進行身份驗證。我在這裏設置了另一個問題 - http://stackoverflow.com/questions/38881568/securing-restful-api-with-firebase-oauth - 如果有時間給我指出正確的方向。 –

1

TL; DR:第

如果客戶需要能夠直接連接至API,還有就是防止他們發現API密鑰,因爲它們必須通過設計上沒有萬無一失的方法,是能夠訪問它以便在請求中發送它。您可以採取措施對其進行模糊處理,將其存儲起來進行編碼(但客戶端也必須具有解碼算法)。

事實上,您的iOS應用程序也是如此。有人可以對二進制進行逆向工程,或攔截請求並查看標題,發現API密鑰。

一個可能的「解決方案」很可能會對每一個客戶得到自己的API密鑰,無論是暫時的還是永久的,即以某種方式鎖定到他們的帳戶/設備/會話限制重用。

+0

感謝明確的答案。我正在使用Firebase進行用戶身份驗證,並想知道是否可以使用OAuth對我的API進行身份驗證。我在這裏設置了另一個問題 - http://stackoverflow.com/questions/38881568/securing-restful-api-with-firebase-oauth - 如果有時間給我指出正確的方向。 –

相關問題