Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对前端到后端的api调用进行签名_Javascript_Django_Security_Jwt - Fatal编程技术网

Javascript 对前端到后端的api调用进行签名

Javascript 对前端到后端的api调用进行签名,javascript,django,security,jwt,Javascript,Django,Security,Jwt,我正在为前端实现一种安全的方式,使用密钥与后端通信。后端是一项敏感服务(移动银行) 首先我想到的是JWT,但基于令牌的方法有两个缺点: a) 前端必须获得令牌,这意味着它必须向后端发送一些身份验证数据——如果前端可以这样做,任何人都可以这样做 b) 即使有某种安全的方式获得令牌,任何人都可以启动Chrome开发工具并在令牌未过期时使用它 因此,另一种方法是使用密钥对来自前端的每个请求进行签名。密钥为后端和前端所知。前端被捆绑和丑化,以保密密钥。我们连接请求URL及其有效负载,使用密钥对它们进行加

我正在为前端实现一种安全的方式,使用密钥与后端通信。后端是一项敏感服务(移动银行)

首先我想到的是JWT,但基于令牌的方法有两个缺点:

a) 前端必须获得令牌,这意味着它必须向后端发送一些身份验证数据——如果前端可以这样做,任何人都可以这样做

b) 即使有某种安全的方式获得令牌,任何人都可以启动Chrome开发工具并在令牌未过期时使用它

因此,另一种方法是使用密钥对来自前端的每个请求进行签名。密钥为后端和前端所知。前端被捆绑和丑化,以保密密钥。我们连接请求URL及其有效负载,使用密钥对它们进行加密,并在头中发送结果哈希。后端获取请求,执行相同的加密并比较报头;如果他们相等,它会提出请求

这就引出了三个问题:

  • 这是否真的意味着即使嗅探到请求,也无法复制,除非url+负载相同?有什么我遗漏的吗

  • 有没有实现这种方法的JS库?(也可能是后端的一些东西——我正在使用Django)

  • 有更好的方法吗


根据需要捆绑,如果授权请求的安全密钥在js中,我将能够取消丑陋(美化)并获得它。使用SSL加密连接,只需使用JWT;)


您必须以某种方式授权用户,因此这意味着发送私有数据以建立“会话”。让它成为用户名、电子邮件、密码或一些“秘密”令牌

这不是一种特别安全的方法:这是通过模糊处理实现的安全性。虽然关键是隐藏在前端通过丑化,它仍然在那里有人发现如果他们努力不够…而不是滚动自己的解决方案,考虑使用一些尝试和测试,如OAuth.前端和后端都有可用的库/工具包(Django OAuth Toolkit),JWT完全按照您试图重新创建的方式进行操作,但安全性更高。如果你的秘密在客户端,那么弄清楚它就很简单了。