我正在实现一种安全的方式,让前端使用密钥与后端进行通信。后端是一项敏感服务(手机银行)。
首先我在考虑JWT,但基于令牌的方法有两个缺点:
a)前端必须获取令牌,这意味着它必须向后端发送一些身份验证数据 - 如果前端可以这样做,任何人都可以这样做。
b)即使有一些获得令牌的安全方式,任何人都可以启动Chrome开发工具并在未过期时使用它。因此,替代方法是使用密钥从前端签署每个请求。密钥是已知的后端和前端的前端捆绑和uglified,以保持密钥的秘密。我们连接请求URL及其有效负载,使用密钥加密它们,并在标头中发送结果哈希。后端获取请求,执行相同的加密并比较标头;如果他们是平等的 - 它会提出请求。
这引出了三个问题:
这是否真的意味着即使请求被嗅探,除非url +有效负载相同,否则无法再现?有什么我想念的吗?
是否有JS库实现这种方法? (或者也许是后端的东西 - 我正在使用Django)
有更好的方法吗?
答案 0 :(得分:2)
捆绑你想要的,如果你的安全密钥授权请求在js里面我将能够un-uglify(美化)并获得它。使用SSL加密连接,只使用JWT;)
无论如何,您必须以某种方式授权用户,因此这意味着发送私人数据以建立"会话"。让它成为用户名,电子邮件,密码或一些"秘密"令牌。