Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我更改密码时,如何防止使用旧的flask jwt令牌_Flask_Jwt_Flask Security_Flask Jwt - Fatal编程技术网

当我更改密码时,如何防止使用旧的flask jwt令牌

当我更改密码时,如何防止使用旧的flask jwt令牌,flask,jwt,flask-security,flask-jwt,Flask,Jwt,Flask Security,Flask Jwt,我是使用JWT和烧瓶JWT的新手。我在我的项目中实现了flast jwt。即使我更改了用户密码,从flask jwt收到的访问令牌也没有过期。那么如何防止使用旧的flask jwt令牌。这是使用无状态jwt令牌的一个缺点-您不能显式地撤销它们 相应的优点是,您不必联系外部服务来验证它们。我们可以通过将所有令牌存储在数据库中来构建额外的安全层。验证令牌时,我们可以检查此令牌是否由服务器本身生成,是否使用此数据库表生成。当用户重置其密码时,我们也可以通过从数据库中删除令牌来撤销令牌 重要的是要记住,

我是使用JWT和烧瓶JWT的新手。我在我的项目中实现了flast jwt。即使我更改了用户密码,从flask jwt收到的访问令牌也没有过期。那么如何防止使用旧的flask jwt令牌。

这是使用无状态jwt令牌的一个缺点-您不能显式地撤销它们


相应的优点是,您不必联系外部服务来验证它们。

我们可以通过将所有令牌存储在数据库中来构建额外的安全层。验证令牌时,我们可以检查此令牌是否由服务器本身生成,是否使用此数据库表生成。当用户重置其密码时,我们也可以通过从数据库中删除令牌来撤销令牌

重要的是要记住,(无状态)JWT令牌只有在到期或用于签名的共享密钥更改时才会失效

因此,基本上,选择是:

  • 按照@savad kp的建议,使用数据库,保留黑名单/吊销令牌的列表:这意味着您每次验证令牌时都必须查询它,这破坏了使用JWT令牌的主要好处之一
  • 依赖于短期访问令牌:这意味着客户端需要经常重新验证,这可能是移动设备和web应用程序的一个不可行选项
  • 使用或某些其他自定义变量:
[…]您可以选择将一些访问令牌标记为新鲜,而将其他令牌标记为非新鲜,并使用fresh_jwt_required decorator仅允许新鲜令牌访问某些端点

这对于允许新令牌执行一些关键操作(可能更改密码或完成在线购买)非常有用,但对于非新令牌则拒绝这些功能(直到它们重新验证并获得新的新令牌)。新的令牌可以带来更安全的站点,而不会通过让用户一直重新验证而造成糟糕的用户体验


我还建议使用插件而不是flask jwt插件。它支持一些现成的常见模式(刷新令牌、令牌新鲜度)以及黑名单和使用db撤销令牌。

我们无法显式撤销flask jwt令牌。没关系。那我该怎么防止呢。我不理解第二行。当联系您的资源服务器时,它可能会验证令牌本身的有效性,而无需联系其他服务器进行验证。对于非JWT访问令牌(通常只是一个随机字符串),您必须调用发出令牌的服务器来验证它。这是相对昂贵的。通过将所有生成的令牌保留在数据库中,解决了此问题。