我有一個私有API,我在那裏使用基本身份驗證作爲我的安全層。現在我的iOS應用程序使用API,因此沒有人能夠看到密鑰對。使用Javascript進行基本身份驗證而不公開密鑰對
我現在製作在Web相同的應用程序,使用反應,Javascript和需要使用基本身份驗證消耗相同的API。
我如何在JavaScript中使用我的API密鑰對,而不該密鑰對暴露給公衆?這樣的事情甚至可能嗎?
我有一個私有API,我在那裏使用基本身份驗證作爲我的安全層。現在我的iOS應用程序使用API,因此沒有人能夠看到密鑰對。使用Javascript進行基本身份驗證而不公開密鑰對
我現在製作在Web相同的應用程序,使用反應,Javascript和需要使用基本身份驗證消耗相同的API。
我如何在JavaScript中使用我的API密鑰對,而不該密鑰對暴露給公衆?這樣的事情甚至可能嗎?
正如@Andrew提到的,這是不可能的,你可以只是使它更難獲得,但它會在某個地方在那裏上的客戶端代碼,而這足以說你曝光。
如果你打開的替代品,我建議你使用每用戶身份驗證的第一個請求,然後再請求基於令牌的認證。該令牌可以是JSON Web Token,它是我談論的流動:
這是它的工作方式,從JWT's official documentation採取:
在身份驗證,用戶在成功在使用他們的 憑據登錄,一個JSON網絡令牌將被退回,並且必須保存在本地 (通常在本地存儲,但餅乾也可以使用),的 代替C的傳統方法在 服務器上關閉會話並返回cookie。
每當用戶想要訪問受保護的途徑和資源,在 用戶代理髮送的智威湯遜,通常使用承載模式 Authorization頭 。標題的內容應該像 如下:
Authorization: Bearer <token>
感謝您提供明確的答案和我能做的事例。我正在使用Firebase進行用戶身份驗證,並想知道是否可以使用OAuth對我的API進行身份驗證。我在這裏設置了另一個問題 - http://stackoverflow.com/questions/38881568/securing-restful-api-with-firebase-oauth - 如果有時間給我指出正確的方向。 –
TL; DR:第
如果客戶需要能夠直接連接至API,還有就是防止他們發現API密鑰,因爲它們必須通過設計上沒有萬無一失的方法,是能夠訪問它以便在請求中發送它。您可以採取措施對其進行模糊處理,將其存儲起來進行編碼(但客戶端也必須具有解碼算法)。
事實上,您的iOS應用程序也是如此。有人可以對二進制進行逆向工程,或攔截請求並查看標題,發現API密鑰。
一個可能的「解決方案」很可能會對每一個客戶得到自己的API密鑰,無論是暫時的還是永久的,即以某種方式鎖定到他們的帳戶/設備/會話限制重用。
感謝明確的答案。我正在使用Firebase進行用戶身份驗證,並想知道是否可以使用OAuth對我的API進行身份驗證。我在這裏設置了另一個問題 - http://stackoverflow.com/questions/38881568/securing-restful-api-with-firebase-oauth - 如果有時間給我指出正確的方向。 –
你給每個用戶自己或把某些東西在他們就像一個反向代理的API之間 – Deryck