【发布时间】:2016-03-03 21:34:11
【问题描述】:
我是使用 JWT 和 flask-jwt 的新手。我在我的项目中实现了 flash-jwt。即使我更改了用户密码,从 flask-jwt 收到的访问令牌也不会过期。那么如何防止使用旧的flask-jwt令牌。
【问题讨论】:
-
通过将所有生成的令牌保存在我们的数据库中解决了这个问题。
标签: flask jwt flask-security flask-jwt
我是使用 JWT 和 flask-jwt 的新手。我在我的项目中实现了 flash-jwt。即使我更改了用户密码,从 flask-jwt 收到的访问令牌也不会过期。那么如何防止使用旧的flask-jwt令牌。
【问题讨论】:
标签: flask jwt flask-security flask-jwt
这是使用无状态 JWT 令牌的一个缺点 - 您不能显式撤销它们。
相应的优点是您不必联系外部服务来验证它们。
【讨论】:
我们可以通过将所有令牌存储在我们的数据库中来构建一个额外的安全层。在验证令牌时,我们可以检查这个令牌是由我们的服务器本身生成的,还是不是使用这个数据库表生成的。我们也可以在用户重置他的密码时撤销令牌,只需从数据库中删除该令牌。
【讨论】:
请务必记住,(无状态)JWT 令牌仅在过期或用于签署它们的共享密钥发生更改时才会失效。
所以基本上,选择是:
[...] 您可以选择将一些访问令牌标记为新鲜,而将其他令牌标记为非新鲜,并使用fresh_jwt_required 装饰器仅允许新鲜令牌访问某些端点。
这对于允许新令牌执行某些关键操作(可能更改密码或完成在线购买)很有用,但对非新令牌拒绝这些功能(直到他们重新验证并获得新令牌) )。新鲜的令牌可以带来更安全的网站,而不会因为让用户一直重新进行身份验证而造成糟糕的用户体验。
我还建议使用 flask-jwt-extended 插件而不是 flask-jwt 插件。它支持一些开箱即用的常见模式(刷新令牌、令牌新鲜度)以及使用 db 的黑名单和令牌撤销。
【讨论】: