首页 > 解决方案 > 主要使用JWT的无状态认证真的安全吗?

问题描述

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

标签: securityauthenticationjwtsingle-page-applicationstateless

解决方案


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


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

4.1.2.5。安全属性

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

4.1.2.6。HttpOnly 属性

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


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

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

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


推荐阅读