mai*_*365 5 spring json token jwt
我知道JWT可以用来代替基于cookie/session的认证,我们在之前的项目中使用过,我知道使用JWT有很多好处,例如无状态,CDN支持,避免csrf攻击,更好地支持集群 ENV 等
但是,我很困惑 JWT 是否可以完全取代 Session?如果我们想充分利用 JWT 来保留所有会话状态,那么这意味着任何时候服务器后端想要将任何状态添加到会话中,而不是这样做,服务器端必须使用该信息和客户端重新生成一个新令牌方必须更新新生成的令牌,我怀疑这是否正确?
如果我们只利用 JWT 来支持身份验证并只保留用户凭据信息,虽然身份验证服务可以解耦为独立的微服务,但如果我们想保留一些会话,业务服务后端仍然需要会话状态,对吗?在阅读 spring 文档时,建议利用 Redis 保存会话状态以支持集群环境。
总的来说,我对是否可以使用 JWT 完全替代 session 感到非常困惑?
非常感谢。
(这还不是答案。只是到目前为止我收集的一些信息。我有完全相同的问题。当我彻底解决这个问题时,我会将其更改为答案。)
到目前为止,我认为就身份验证而言,JWT 可以用来替代 session+cookie。但是 session 不仅仅用于身份验证,它实际上更多地用于用户特定的数据存储。鉴于 JWT 的大小限制(如下所述),我不确定 JWT 是否可以为此目的替换会话。恕我直言,身份验证恰好是会话的用例之一,因为此类信息必须特定于用户。
如果您使用 JWT 代替服务器端会话,您可能会将 JWT 存储为 HTTP 标头。更有可能的是,作为 Cookie(请参阅此处)。但是标题有一些大小限制,cookie 有 4K。如果您使用服务器端会话,我认为不存在这样的限制。
并且本文列出了 JWT 的一些注意事项。
添加 1
下面是一个类似的帖子,质疑 JWT 是否可以完全取代会话存储。我只是在那里添加了更多答案。请务必看一看。
我需要使用 JSON Web Token 令牌的会话存储吗?为什么不只使用 cookie?
添加 2
如果我们将 JWT 存储为 cookie 作为我上面的第一个链接,这不是对signed-cookie的重新实现吗?
答案就在这里:我们应该将 JWT 存储为 cookie 吗?
我的另一个问题:基于令牌的身份验证和可扩展性?错觉?