我读到的关于在网站上使用JWT的所有内容似乎都暗示它们适用于SPAs。
我的网站有很多静态页面,但也需要用户登录。使用JWT是否合适?
答案 0 :(得分:3)
取决于您的意思。
如果您正确生成jwt并将其存储在一个httponly,安全的cookie中,那么在许多方面它将与普通的旧会话ID相同(但它可能在服务器上是无状态的,具有所有潜在的漏洞在客户端上存储状态,例如重放)。
如果您以除httponly cookie之外的任何其他方式存储它,它将不太安全。然后,应用程序中的单个xss将允许攻击者窃取用户令牌。是否要接受此风险取决于您,但对于安全性至关重要的应用程序,它可能不够好。
因此,简而言之,jwt只是一种在客户端上存储内容的签名(但默认情况下不加密)方式。用户或攻击者无法轻易更改内容,但就是这样,他可以阅读,重播等等。
如果你只在其中存储某种id,那么它与普通会话id没有区别(在这种情况下,使用它没有意义)。如果您存储状态(会话数据),这可能会带来您必须关心自己的漏洞,例如重放攻击的风险,用户能够从应用程序中找到签名密钥并为自己签署jwts,这是一个缺陷在你的jwt实现中,用户能够看到会话内容(因为jwts没有加密)等等。