下面的Flask RESTful Destroy User Token讨论了如何销毁烧瓶令牌,但这并不能阻止中间人的攻击。 是否有办法使令牌无效,使其在过期之前不再处于活动状态?
您引用的问题中显示的令牌是通过向某些数据添加加密签名来创建的。通常,存储在令牌中的数据包括令牌所有者(例如用户 ID),还可以包括到期日期。
这些令牌的好处是所有有用的数据存储在令牌中,因此您无需在数据库中存储任何内容。您只需将令牌传递给客户端,当客户端将其发回时,您对其进行解码并使用其中的信息来了解客户端是谁。
这种方法的缺点是没有简单的方法来撤销令牌,因为令牌不存储在任何地方。若要扩展此机制以允许吊销,可以添加存储已吊销令牌的数据库表。然后,在令牌验证期间,您不仅可以解码令牌,还要确保令牌不在吊销列表中。
另一种完全不同的方法是不使用签名令牌。只需将令牌设置为随机 UUID,并将其存储在每个用户的用户表中即可。如果为其编制索引,则当客户端发送令牌时,可以通过数据库搜索找到用户。然后撤销令牌只需清除用户的令牌字段即可完成。
我希望这有帮助!