主要使用JWT的无状态身份验证是否真的安全?

时间:2018-04-25 14:19:29

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

我有这个问题很长一段时间JWT真的很安全吗?因为编码索赔和有效负载的原因我们可以很容易地解码令牌,这个解码也很好地在网站上给出。所以我的观点是任何人都可以使用像burpsuite或任何东西这样的工具简单地更改auth标头,并给出一些其他有效的令牌并验证假用户。按照许多人的建议将令牌存储在localStorage中也可能不太安全。所以我的问题是,与加密的cookie或会话相比,它是否真的安全?无状态身份验证的好处是什么?我读过许多JWT对单页应用程序有用的文章。这是真的吗?

1 个答案:

答案 0 :(得分:2)

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

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

  

4.1.2.5. The Secure Attribute

     

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