簡體   English   中英

在Javascript Web App中保護私有API密鑰

[英]Securing Private API keys in Javascript Web App

如何在基於Web的(javascript)應用程序中將密鑰安全地存儲到我的私有API中?

我已經徹底研究了這個,但我還沒有找到一個可靠的答案或任何標准的程序。

我的API實現了HMAC身份驗證,我站點的每個成員都有一個公鑰/密鑰來驗證他們對API的使用並簽署​​他們的請求。

在移動應用程序上,服務器將通過加密連接發送公鑰/密鑰,以在成功登錄請求后存儲在設備上。 后續請求將使用這些密鑰進行簽名。

那么在這種情況下我應該將密鑰存儲在客戶端上,考慮到知道如何使用Web檢查器的任何人都可以看到源代碼? 實際上,如果經過身份驗證的用戶看到自己的密鑰,則不會出現問題,因為他們不太可能分享他們,就像他們不太可能與其他任何人分享他們的帳戶用戶名/密碼一樣。


可能的解決方案?

將公鑰/密鑰存儲在cookie中,並使用javascript檢索 - 可能不太安全,可以在用戶注銷/會話結束時可靠地清除cookie嗎?

將公鑰/密鑰存儲在網頁本身 - 只有我能想到的真正的解決方案--Javascript可以通過DOM訪問密鑰,只有當用戶離開他們的帳戶時才會被泄露(見),有人知道在哪里尋找它們。

注意:Web應用程序不是單頁應用程序,因此不能在內存中存儲公鑰/密鑰。


不確定我是否在正確的軌道上(有些東西告訴我,我不是),希望有人可以讓我直截了當。

謝謝

我得出結論,我在這里想要保護的是CSRF ..

我正在使用laravel,所以我的解決方案是在頭部添加csrf nonce(Session :: token()), 如此處所示

<meta name="token" content="32947fh2834fgkhgfr8724234f">

並在請求標頭中發送它:

$.ajaxSetup({
    headers: { 'session_token': '32947fh2834fgkhgfr8724234f' }
});

在授權api請求時,檢查“session_token”標頭並驗證其真實性是一種情況。 如果session_token不在那里,它將回退到HMAC檢查。

加上ssl這應該夠了,思考?

不確定有一個明確的解決方案。 聽起來你正試圖在瀏覽器中存儲“秘密”? 即使您試圖對其進行模糊處理,也無法查看它。

問候,

在前端應用程序上使用API​​密鑰和令牌始終需要安全地存儲密鑰或令牌,遺憾的是,瀏覽器(客戶端)沒有這樣的存儲。 在身份驗證之后使用Access令牌(如果是Oauth)而不是API密鑰可以克服這種情況,並且這些訪問令牌也可以擁有自己的過期時間。

如果真的需要針對客戶端存儲的密鑰/令牌的額外安全性,在這種情況下,我們會想出一個解決方案,比如使用base64類方法加密我們的令牌,使用一些散列算法並在API端點中解密和驗證將是解決方案。

在這種情況下,以下博文可能會有所幫助:

https://www.wolfe.id.au/2012/10/20/what-is-hmac-authentication-and-why-is-it-useful/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM