我的理解是:
基于Cookie的解决方案可以通过创建cookie httpOnly轻松抵御XSS。但是,基于cookie的解决方案容易受到CSRF的影响(如果没有额外的令牌保护)。
JWT在这方面具有优势,因为默认情况下不可能使用CSRF。 然而,JWT可以被利用作为XSS弱点的一部分,因为该令牌必须可用于JavaScript。这被认为不是什么大问题,因为XSS更易于理解,更容易防范。
但是:为什么不使用JWT并添加一个httpOnly-cookie(包含令牌的签名)以获得两全其美的效果?
生成令牌时,服务器还会从令牌生成签名并将其发送回cookie中。 (令牌仍然一如既往地发送给客户端。)(签名当然必须与令牌中包含的签名不同。)
当服务器收到请求时,它会检查cookie是否也被发送,并将其值与新计算的令牌签名进行比较。
所以:既然这种方法已经不常用了,那么我必须忽略一些重要的事情,对吗?
(我想到的唯一问题是cookie和多个域/ CORS的旧问题。)