当我想让 JWT 令牌失效时,JWT 和会话 cookie 有什么区别?
what is difference between JWT and session-cookie when i want to invalidate JWT token?
当我阅读JWT的文档时,我了解到我们不需要使用session来保存用户数据,因为它在请求头中被加密,实际上JWT是无状态的。
但是如果我的用户被停用,我想删除 JWT 令牌。
在这种情况下,在我的 JWK 中间件中,在验证令牌后,我必须在我的 mongoDB 中进行查询,以检查该用户是活动的还是停用的。
所以它不是无状态的,另一方面它对 mongoDB 来说是一个很大的过载,因为 mongoDB 不是保存会话的好数据库!!所以我需要 Redis.. 如果我想使用 Redis,session 和 cookie 与 JWT 之间有什么区别?
正如您提到的,JWT 令牌可以携带任意的用户相关信息。通信保持无状态状态,因为服务器不记得在先前请求期间此特定客户端的状态。您必须为每个请求提供上下文,您以 JWT 令牌的形式提供。
只要context小,都放在token里就可以了。当有很多上下文时,将它与每个请求一起传递可能不再是最佳选择。这是您需要切换到在后端存储状态的时候。
在这个程度上,JWT 和 cookie 是在请求之间携带上下文的类似机制。当您必须决定是否应使用后端会话存储来减少每个请求中传输的数据大小时,它们都受大小限制。
当我阅读JWT的文档时,我了解到我们不需要使用session来保存用户数据,因为它在请求头中被加密,实际上JWT是无状态的。
但是如果我的用户被停用,我想删除 JWT 令牌。
在这种情况下,在我的 JWK 中间件中,在验证令牌后,我必须在我的 mongoDB 中进行查询,以检查该用户是活动的还是停用的。
所以它不是无状态的,另一方面它对 mongoDB 来说是一个很大的过载,因为 mongoDB 不是保存会话的好数据库!!所以我需要 Redis.. 如果我想使用 Redis,session 和 cookie 与 JWT 之间有什么区别?
正如您提到的,JWT 令牌可以携带任意的用户相关信息。通信保持无状态状态,因为服务器不记得在先前请求期间此特定客户端的状态。您必须为每个请求提供上下文,您以 JWT 令牌的形式提供。
只要context小,都放在token里就可以了。当有很多上下文时,将它与每个请求一起传递可能不再是最佳选择。这是您需要切换到在后端存储状态的时候。
在这个程度上,JWT 和 cookie 是在请求之间携带上下文的类似机制。当您必须决定是否应使用后端会话存储来减少每个请求中传输的数据大小时,它们都受大小限制。