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

时间:2015-11-30 09:34:56

标签: flask jwt flask-security flask-jwt

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

3 个答案:

答案 0 :(得分:3)

这是使用无状态JWT令牌的结果 - 您无法明确撤销它们。

相应的专业人员是您无需联系外部服务即可验证它们。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

重要的是要记住(无状态)JWT令牌只有在它们到期或用于签名的共享秘密发生变化时才会失效。

基本上,选择是:

  • 使用@ savad-kp建议的数据库来保留列入黑名单/已撤销的令牌列表:这意味着每次验证令牌时都必须查询它,这类破坏使用JWT令牌的主要好处之一。
  • 依靠短期访问令牌:这意味着客户需要经常重新验证,这可能是专门针对移动设备和网络应用的禁止选项
  • 使用token freshness pattern或其他一些自定义变体:
  

[...]您可以选择将一些访问令牌标记为新鲜,将其他标记标记为非新鲜,并使用fresh_jwt_required装饰器仅允许新标记访问某些端点。

     

这对于允许新鲜令牌执行某些重要操作(可能更改密码或完成在线购买)非常有用,但可以将这些功能拒绝为非新鲜令牌(直到他们重新进行身份验证并获得新的令牌) )。新鲜令牌可以带来更安全的站点,而不会通过让用户始终重新进行身份验证来创建糟糕的用户体验。

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