Session 您需要在JWT中设置过期日期吗?

Session 您需要在JWT中设置过期日期吗?,session,redis,jwt,Session,Redis,Jwt,如果我在我的应用程序中使用JWT和Redis的混合来存储会话数据,那么我是否需要在JWT令牌本身中包含一个过期令牌 例如,当您登录应用程序时,会生成一个会话id,并将其添加到redis数据库中,有效期为3天。然后,该会话id(连同用户名)用于创建JWT负载。在所有身份验证请求中,我确保redis数据库中存在令牌中的会话id。如果没有,则会话已过期,我将发出一个新令牌 此实现是否存在安全问题?没有安全问题,但有人可能会认为,通过在JWT中包含到期字段,可以使Redis层过时。原则上,JWT允许应用

如果我在我的应用程序中使用JWT和Redis的混合来存储会话数据,那么我是否需要在JWT令牌本身中包含一个过期令牌

例如,当您登录应用程序时,会生成一个会话id,并将其添加到redis数据库中,有效期为3天。然后,该会话id(连同用户名)用于创建JWT负载。在所有身份验证请求中,我确保redis数据库中存在令牌中的会话id。如果没有,则会话已过期,我将发出一个新令牌


此实现是否存在安全问题?

没有安全问题,但有人可能会认为,通过在JWT中包含到期字段,可以使Redis层过时。原则上,JWT允许应用程序变为无状态。如果您的应用程序打算以任何方式将其所有会话数据存储在Redis中(因为JWT太大了),您可能会认为使用JWT而不是简单的随机会话标识符的好处已经消失了


底线:JWT中的
exp
字段是可选的,您可以自由实现另一种机制来实现相同的功能。

这取决于您如何实现身份验证/授权层

您的身份验证/授权流是有状态的,因此过期与会话非常耦合。我会包括过期,只是为了让整个JWT的消费者知道什么时候会过期,并根据这些信息采取行动

还有一种无状态方法,其中没有会话标识符,也没有存储信息的服务器,但JWT是自描述性的,包含过期和其他声明中的数据。由于JWT的使用者依赖于JWT生产者,并且通过使用诸如HTTPS/SSL之类的传输级安全方法来保护通信,因此不需要维护状态,但状态就是JWT本身


最著名和标准化的自动认证/授权流程之一是。我想说的是,您应该在行业标准之上构建您的安全层。这很好,因为您可以避免大量的研发、安全漏洞和时间。

如果我只在JWT中包含过期,我是否可以强制放弃对过期会话的控制?如果我决定推送更新并希望修剪所有会话,我必须至少等待会话的长度,然后才能确保修剪所有较旧的JWT否?这是正确的,但您可以缩短到期时间,并对JWT进行滚动刷新以缓解此问题