将客户端的API Secret保留在浏览器中并通过JS访问它

时间:2014-10-31 20:12:50

标签: javascript security

我们有服务器端授权,要求使用密钥对服务器的每个请求进行签名。当通信完成服务器< - > server。

时,它适用于API目的

在客户端< - >服务器上,我们使用短信授权。

短信不是真的可靠,而且速度不够快,而且花了很多钱。

基本理念: 我们允许用户将他的秘密API密钥存储在浏览器的本地存储中。它保存在那里用他的秘密密码编码(我们不知道)。 当用户想要打开安全会话时,JS会提示他输入他的密码。 JS从本地存储中获取其秘密API密钥,使用该密码对其进行解码并用于签署验证请求。在服务器端,我们知道秘密,如果验证请求用正确的密钥签名,我们打开安全会话。

这样用户实际上授权特定机器上的特定浏览器打开安全会话(使用额外的密码)。

问题: 将编码的秘密API密钥保存在浏览器的本地存储中有多安全?用JS的客户密码解密它有多安全?

1 个答案:

答案 0 :(得分:1)

  

双因素身份验证可以明确识别用户   通过两种不同组件的组合。

您的解决方案与双因素身份验证无关。因为两个因素可以在用户名/密码被盗时保护您的客户端。例如,您的一台客户端计算机受到恶意软件感染,而这种恶意软件具有嗅探键盘操作的能力(这几乎是所有恶意软件的特征)。在您的解决方案中,即使您一次又一次地询问密码,任何人都可以轻松登录。

使用手机作为第二因素身份验证是违反我上面描述的情况。

即使您有机会对其进行加密,在客户端存储敏感信息也始终是个坏主意。 (更多信息:https://www.owasp.org/index.php/HTML5_Security_Cheat_Sheet)另一件事是您的加密算法开发没有任何问题。

我建议您使用Google身份验证器,而无需支付单一美元。我认为几乎所有客户都有智能手机,他们可以轻松使用谷歌身份验证器应用程序两个因素。