【发布时间】:2014-09-27 13:17:08
【问题描述】:
如何在基于 Web 的 (javascript) 应用程序中安全地存储私有 API 的密钥?
我对此进行了彻底的研究,但尚未找到可靠的答案或任何类型的标准程序。
我的 API 实现了 HMAC 身份验证,我网站的每个成员都有一个公钥/密钥来验证他们对 API 的使用并签署他们的请求。
在移动应用上,服务器会在成功登录请求后通过加密连接发送公钥/私钥以存储在设备上。后续请求将使用这些密钥进行签名。
那么在这种情况下,我应该将密钥存储在客户端的什么位置,因为任何知道如何使用 Web 检查器的人都可以看到源代码?实际上,如果经过身份验证的用户看到自己的密钥,这不是问题,因为他们不太可能与其他任何人共享他们的帐户用户名/密码一样共享它们。
可能的解决方案?
将公钥/密钥存储在 cookie 中,并使用 javascript 检索 - 可能不太安全,当用户注销/会话结束时,cookie 能否可靠地清除?
将公钥/私钥存储在网页本身中 - 我能想到的唯一真正的解决方案 - Javascript 可以通过 DOM 访问密钥,并且只有在用户让他们的帐户保持登录状态,并且有人知道在哪里可以找到他们。
注意: Web 应用程序不是单页应用程序,因此不能将公钥/密钥存储在内存中。
不确定我是否在正确的轨道上(有些东西告诉我我不是),希望有人可以让我明白这一点。
谢谢
【问题讨论】:
标签: javascript api security rest authentication