Authentication 取消JWT而不过期

Authentication 取消JWT而不过期,authentication,oauth-2.0,jwt,Authentication,Oauth 2.0,Jwt,我希望为一个移动应用程序使用基于令牌的身份验证,只要用户没有注销,该应用程序就可以让用户一直登录。我的方法是在用户登录/注册时创建JWT刷新令牌;此令牌永不过期,并继续刷新20分钟访问令牌 当他们注销时,问题就出现了。我已经读到最好的方法是将Redis上的JWT列入黑名单以存储撤销的密钥。然而,由于JWT从未过期,因此记录永远无法从Redis中删除,并且可能会开始占用我的大量内存 我应该担心这一点,还是Redis在这方面的内存效率很高?有没有更好的方法可以在不过期的情况下撤销JWT?JWT令牌是

我希望为一个移动应用程序使用基于令牌的身份验证,只要用户没有注销,该应用程序就可以让用户一直登录。我的方法是在用户登录/注册时创建JWT刷新令牌;此令牌永不过期,并继续刷新20分钟访问令牌

当他们注销时,问题就出现了。我已经读到最好的方法是将Redis上的JWT列入黑名单以存储撤销的密钥。然而,由于JWT从未过期,因此记录永远无法从Redis中删除,并且可能会开始占用我的大量内存


我应该担心这一点,还是Redis在这方面的内存效率很高?有没有更好的方法可以在不过期的情况下撤销JWT?

JWT令牌是一种自包含的令牌。这意味着它在到期之前是独立存在的,不能被撤销。因此,根据定义,它必须过期。因为当它落入坏人之手时,它将允许访问您的资源,而无法撤销它。因此,是的,您应该担心这个实现

这里的问题是您信任刷新令牌本身,因为它是JWT。实际上,您应该信任服务器。不是因为JWT不可信,而是因为刷新令牌不必是JWT

将刷新令牌保存在内存中,包括过期时间。您可以从内存中删除过期的令牌。这意味着只有内存中存在的令牌才能用于请求新的访问令牌。为了安全起见,请使用一次性刷新令牌

流程如下所示:

  • 用户登录,接收JWT访问令牌(5分钟)和刷新令牌1代码(48小时)。刷新令牌1保存在服务器上
  • 五分钟后:访问令牌过期
  • 使用刷新令牌1请求新的访问令牌
  • 用户收到新的访问令牌(5分钟)和刷新令牌2代码(48小时)。令牌1从内存中删除,令牌2添加到内存中
  • 这种情况持续了几个小时
  • 用户有两天没有使用该应用程序
  • 50小时后:由于两个令牌都已过期,用户必须再次登录。重置流

  • 注销时从内存中删除刷新令牌。如果同时你想撤销访问权。只需从内存中删除刷新令牌。在5分钟内,用户必须再次登录。

    JWT令牌是一个自包含的令牌。这意味着它在到期之前是独立存在的,不能被撤销。因此,根据定义,它必须过期。因为当它落入坏人之手时,它将允许访问您的资源,而无法撤销它。因此,是的,您应该担心这个实现

    这里的问题是您信任刷新令牌本身,因为它是JWT。实际上,您应该信任服务器。不是因为JWT不可信,而是因为刷新令牌不必是JWT

    将刷新令牌保存在内存中,包括过期时间。您可以从内存中删除过期的令牌。这意味着只有内存中存在的令牌才能用于请求新的访问令牌。为了安全起见,请使用一次性刷新令牌

    流程如下所示:

  • 用户登录,接收JWT访问令牌(5分钟)和刷新令牌1代码(48小时)。刷新令牌1保存在服务器上
  • 五分钟后:访问令牌过期
  • 使用刷新令牌1请求新的访问令牌
  • 用户收到新的访问令牌(5分钟)和刷新令牌2代码(48小时)。令牌1从内存中删除,令牌2添加到内存中
  • 这种情况持续了几个小时
  • 用户有两天没有使用该应用程序
  • 50小时后:由于两个令牌都已过期,用户必须再次登录。重置流

  • 注销时从内存中删除刷新令牌。如果同时你想撤销访问权。只需从内存中删除刷新令牌。在5分钟内,用户必须再次登录。

    刷新令牌将不会授予对资源的访问权限,仅授予身份验证服务器以获取访问密钥。同样对于移动应用程序,一点也不注销是常见的做法。像Facebook或Snapchat一样,您可以永远保持登录状态。您建议如何实现此功能?刷新令牌不会授予对资源的访问权限,仅授予身份验证服务器以获取访问密钥。同样对于移动应用程序,一点也不注销是常见的做法。像Facebook或Snapchat一样,您可以永远保持登录状态。您建议如何实现此功能?