【问题标题】:Is stateless authentication mainly using JWT is really secure?主要使用JWT的无状态认证真的安全吗?
【发布时间】:2018-10-06 01:43:14
【问题描述】:

我有一个问题很久了,JWT 真的安全吗?因为在对声明和有效负载进行编码时,我们可以轻松地对令牌进行解码,并且该解码也可以在该网站上很好地提供。所以我的观点是,任何人都可以使用 burpsuite 之类的工具或任何东西简单地更改 auth 标头,并提供一些其他有效令牌并验证假用户。按照许多人的建议将令牌存储在 localStorage 中也可能不太安全。所以我的问题是,与加密的 cookie 或会话相比,它真的安全吗?无状态认证的好处是什么?我读了很多文章,JWT 对 Single Page App 有好处。这是真的吗?

【问题讨论】:

标签: security authentication jwt single-page-application stateless


【解决方案1】:

访问令牌通常在调用者出示其硬凭证(例如用户名和密码)后发出。要访问受保护的资源,调用者需要将访问令牌发送到服务器以对每个请求执行身份验证。


在 Web 应用程序中,访问令牌不应被存储在本地存储中的 JavaScript 访问。相反,访问令牌应该通过 HTTPS 连接发送并存储在设置了 SecureHttpOnly 标志的 cookie 中:

4.1.2.5. The Secure Attribute

Secure 属性将 cookie 的范围限制为“安全” 通道(其中“安全”由用户代理定义)。当一个 cookie 具有 Secure 属性,用户代理将包括 仅当请求通过 安全通道(通常是 HTTP over Transport Layer Security (TLS))。 [...]

4.1.2.6. The HttpOnly Attribute

HttpOnly 属性将 cookie 的范围限制为 HTTP 要求。特别是,该属性指示用户代理 通过“非 HTTP”API 提供对 cookie 的访问时省略 cookie (例如向脚本公开 cookie 的 Web 浏览器 API)。 [...]


在 JWT 中,有效负载是编码为 Base64 的 JSON 字符串。所以它不适合存储密码等敏感信息。

签名令牌允许服务器执行无状态身份验证,即仅通过检查访问令牌内容来判断用户是谁。服务器不会依赖外部服务来对用户进行身份验证。

JWT 令牌应使用强加密密钥(必须在服务器上保持安全)进行签名,并且必须在信任令牌之前检查签名。 p>

【讨论】:

  • 好的,如果我们想在客户端访问令牌以获取用户,它应该存储在 cookie 中对吗?这就是我想听到的,localStorage 对 jwt 不安全,尽管很多人都推荐它,但我总是发现很难在 localstorage 中存储任何东西。
  • 还有一件事如何在使用前检查签名?
  • @AnikethSaha 这个article 可能会有所帮助。
  • @AnikethSaha 如果答案有用,别忘了点赞 :)
  • 我确实做到了。那么我们应该使用jwt进行用户身份验证还是只限于api身份验证
猜你喜欢
  • 2020-10-11
  • 2016-11-28
  • 2018-08-23
  • 2019-04-18
  • 2019-09-16
  • 2016-06-09
  • 2015-11-05
  • 2019-02-17
  • 2020-10-07
相关资源
最近更新 更多