Security 何时应该实现刷新令牌以及如何保持无状态?

Security 何时应该实现刷新令牌以及如何保持无状态?,security,authentication,jwt,refresh-token,stateless,Security,Authentication,Jwt,Refresh Token,Stateless,我正在实施一个认证系统。 系统当前使用JWT运行,并且没有刷新令牌。 为了让用户在合理的时间内保持登录,我们决定将令牌的过期时间设置为12小时。 我看到建议的过期时间是15分钟 我的第一个问题是,是否每个想让用户登录超过15分钟的应用程序都需要实现刷新令牌? 如果是,撤销是唯一的原因,还是安全方式(将刷新令牌保存在httponly cookie中,并将JWT保存在内存中,而不是在cookie中公开令牌)也是一个原因 当我寻找刷新令牌的优势时,我主要看到人们谈论的是撤销,并将安全方式作为刷新令牌的

我正在实施一个认证系统。 系统当前使用JWT运行,并且没有刷新令牌。 为了让用户在合理的时间内保持登录,我们决定将令牌的过期时间设置为12小时。 我看到建议的过期时间是15分钟

我的第一个问题是,是否每个想让用户登录超过15分钟的应用程序都需要实现刷新令牌? 如果是,撤销是唯一的原因,还是安全方式(将刷新令牌保存在httponly cookie中,并将JWT保存在内存中,而不是在cookie中公开令牌)也是一个原因

当我寻找刷新令牌的优势时,我主要看到人们谈论的是撤销,并将安全方式作为刷新令牌的实现细节,而不是优势。 但据我所知,这也是刷新令牌的优点之一

我没有找到没有刷新令牌的JWT的过期时间标准。我想知道这是否是因为从安全角度来看,在大型系统中不实现刷新令牌太危险了

我的第二个问题是,是否可以通过将身份声明添加到刷新令牌中(这样我就可以生成一个新的JWT而不需要点击DB)并放弃撤销,从而实现刷新令牌并保持无状态?这是一个安全漏洞吗

在我看到的所有刷新令牌的实现示例中,我从未看到过无状态的,因为它们都希望启用撤销


我的第三个问题是,如果我没有实现撤销令牌的选项,除了我在第一个问题中提到的安全优势之外,是否有理由使用刷新令牌,而不仅仅是在每次系统收到请求时创建一个具有新过期时间的新JWT?

关于您的问题:

  • 如果您想让用户保持更长的登录时间,那么实现刷新令牌是要采取的方法之一。我见过堆栈溢出上的人每隔10分钟左右根据身份验证令牌进行令牌刷新,但我认为这种方法比刷新令牌更麻烦。我还可以想象在auth服务器上打开一个会话,将会话id放入cookie中,并基于会话刷新JWT auth令牌。这样做没有错

  • 对。当令牌被签名时,您也可以将将来授权的信息放在令牌中。(不要输入任何敏感信息,因为这将是任何人都可以看到的信息)。想想当用户的访问权限发生变化时,系统应该如何运行。在用户注销之前,是否允许用户使用其访问权限运行?假设您意外地授予用户管理员权限。你想用下一个JWT身份验证令牌撤销它们,是吗

  • 那么,您想要一个与刷新令牌一样长的身份验证令牌吗?不会立即发生任何事情。世界仍在转动,太阳仍在照耀。我们将其分离为auth和refresh令牌,因为我们希望能够更好地处理危机情况。身份验证令牌是您一直在任何地方使用的。如果其中一个服务向公众泄漏令牌,您不希望在几分钟内暴露用户的所有数据。如果令牌在几分钟后变得无效,那么即使它们泄漏,攻击者也有一个小的时间窗口来执行攻击


  • 关于你的问题:

  • 如果您想让用户保持更长的登录时间,那么实现刷新令牌是要采取的方法之一。我见过堆栈溢出上的人每隔10分钟左右根据身份验证令牌进行令牌刷新,但我认为这种方法比刷新令牌更麻烦。我还可以想象在auth服务器上打开一个会话,将会话id放入cookie中,并基于会话刷新JWT auth令牌。这样做没有错

  • 对。当令牌被签名时,您也可以将将来授权的信息放在令牌中。(不要输入任何敏感信息,因为这将是任何人都可以看到的信息)。想想当用户的访问权限发生变化时,系统应该如何运行。在用户注销之前,是否允许用户使用其访问权限运行?假设您意外地授予用户管理员权限。你想用下一个JWT身份验证令牌撤销它们,是吗

  • 那么,您想要一个与刷新令牌一样长的身份验证令牌吗?不会立即发生任何事情。世界仍在转动,太阳仍在照耀。我们将其分离为auth和refresh令牌,因为我们希望能够更好地处理危机情况。身份验证令牌是您一直在任何地方使用的。如果其中一个服务向公众泄漏令牌,您不希望在几分钟内暴露用户的所有数据。如果令牌在几分钟后变得无效,那么即使它们泄漏,攻击者也有一个小的时间窗口来执行攻击


  • 只有当您能够以不同于访问令牌的方式保护刷新令牌时,使用刷新令牌才有意义。如果它们在客户端上存储相同,则没有什么好处(有一些与TLS漏洞相关,但可能不太支持实现单独的刷新令牌)

    因此,这就是刷新令牌通常存储在仅http cookie中的原因,因此它受到XSS的保护。访问令牌也可以以这种方式存储,但这样您就无法将其发送到不同的来源

    撤销是另一个问题。您不能撤销