签署从前端到后端的 api 调用

Posted

技术标签:

【中文标题】签署从前端到后端的 api 调用【英文标题】:signing api calls from frontend to backend 【发布时间】:2018-04-01 07:18:09 【问题描述】:

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

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

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

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

因此,另一种方法是使用密钥对来自前端的每个请求进行签名。密钥是后端已知的,前端是经过捆绑和丑化的,以保持密钥的秘密。我们连接请求 URL 及其有效负载,使用密钥对其进行加密,并将生成的哈希发送到标头中。后端获取请求,进行相同的加密并比较标头;如果它们相等 - 它会提出请求。

这引出了三个问题:

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

是否有实现这种方法的 JS 库? (或者也可能是后端的东西 - 我正在使用 Django)

有更好的方法吗?

【问题讨论】:

这不是一种特别安全的方法:这是通过混淆实现的安全性。虽然钥匙通过丑化隐藏在前端,但只要努力了,还是可以找到的…… 与其推出自己的解决方案,不如考虑使用一些久经考验的方法,例如 OAuth。前端和后端都有可用的库/工具包(Django OAuth Toolkit) JWT 完全按照您想要重新创建的方式执行,但方式更加安全。如果您的秘密在客户端,那么弄清楚它是微不足道的。 【参考方案1】:

随心所欲地捆绑,如果您授权请求的安全密钥在 js 中,我将能够取消丑化(美化)并获取它。使用 SSL 加密连接,只使用 JWT ;)

http://jsbeautifier.org/

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

【讨论】:

以上是关于签署从前端到后端的 api 调用的主要内容,如果未能解决你的问题,请参考以下文章

IC设计前端到后端的流程和eda工具

如何将用户信息从前端传递到后端

后端传送图片到前端

如何在nodejs 中前端js调用后台的对象

将自定义用户提供程序与散列密码与 http basic 结合到后端 api

sdk和api