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

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

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

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

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

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

这引出了三个问题:

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

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

  • 有更好的方法吗?

【问题讨论】:

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

标签: javascript django security jwt


【解决方案1】:

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

http://jsbeautifier.org/

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

【讨论】:

    猜你喜欢
    • 2021-09-11
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 2018-11-09
    相关资源
    最近更新 更多