我有这个问题很长一段时间JWT真的很安全吗?因为编码索赔和有效负载的原因我们可以很容易地解码令牌,这个解码也很好地在网站上给出。所以我的观点是任何人都可以使用像burpsuite或任何东西这样的工具简单地更改auth标头,并给出一些其他有效的令牌并验证假用户。按照许多人的建议将令牌存储在localStorage中也可能不太安全。所以我的问题是,与加密的cookie或会话相比,它是否真的安全?无状态身份验证的好处是什么?我读过许多JWT对单页应用程序有用的文章。这是真的吗?
答案 0 :(得分:2)
访问令牌通常在呼叫者提供硬凭证(例如用户名和密码)后发出。要访问受保护资源,调用者应将访问令牌发送到服务器,以便为每个请求执行身份验证。
在Web应用程序中,不应存储在本地存储中的JavaScript访问访问令牌。相反,访问令牌应通过HTTPS连接发送,并存储在设置了Secure
和HttpOnly
标志的cookie中:
Secure
属性将Cookie的范围限制为" secure" 通道(其中"安全"由用户代理定义)。当一个 cookie具有Secure属性,用户代理将包含 仅当请求通过a传输时,HTTP请求中的cookie 安全通道(通常是HTTP over Transport Layer Security(TLS))。 [...]
4.1.2.6. The HttpOnly Attribute
HttpOnly
属性将cookie的范围限制为HTTP 要求。特别是,该属性指示用户代理 通过"非HTTP"提供对cookie的访问时省略cookie。蜜蜂 (例如将cookie暴露给脚本的Web浏览器API)。 [...]
在JWT中,有效负载是编码为Base64的JSON字符串。因此,它不适合存储密码等敏感信息。
签名令牌允许服务器执行无状态身份验证,即通过检查访问令牌内容来告知用户是谁。服务器不依赖于外部服务来验证用户。
JWT令牌应使用强加密密钥(必须在服务器上保持安全)进行签名,并且在信任令牌之前必须检查签名。