如何在基于Web的(JavaScript)应用程序中安全地存储私有API密钥?
我已经做了彻底的研究,但仍未找到可靠的答案或任何标准程序。
我的API实现了HMAC身份验证,我的网站每个成员都有一个公共/秘密密钥来验证他们对API的使用并签署请求。
在移动应用中,服务器会通过加密连接发送公共/秘密密钥以便在成功登录请求后存储在设备上。随后的请求将使用这些密钥进行签名。
那么,在此情况下应该在客户端存储密钥,考虑到源代码对于知道如何使用Web检查器的任何人都是可见的?实际上,如果经过身份验证的用户看到自己的密钥,则不是问题,因为他们不太可能与其他人分享它们,就像他们不太可能与其他人分享帐户用户名/密码一样。
可能的解决方案?
将公共/私密钥存储在Cookie中,并使用JavaScript检索 - 可能不太安全,当用户注销/会话结束时,Cookie是否可以可靠地清除?
将公共/私密钥存储在网页本身中 - 我能想到的唯一真正的解决方案 - JavaScript可以通过DOM访问密钥,只有在用户保持登录状态且其他人知道在哪里查找它们时,它们才会被泄露(看到)。
注意: Web应用程序不是单页面应用程序,因此将公共/私有键存储在内存中不是一个选项。
我不确定自己是否走上了正确的轨道(有些事情告诉我没有),希望有人可以为我指引正确的方向。
谢谢