注销时使 flask-JWT 无效
On logout invalidate flask-JWT
我已经为用户身份验证生成了 Flask-JWT 令牌,但在注销时我想使令牌无效。现在允许登出后访问路由
@app.route('/logout', methods=['POST'])
@jwt_required
def logout():
user = current_user
user.authenticated = False
db.session.commit()
logout_user()
return jsonify({'success': True})
JWT
令牌系统的工作方式是将用户身份(或相关)数据和令牌到期参数放入生成的令牌本身,该令牌本身是用非共享(秘密)签名的 key.If您想要使令牌无效,您需要将令牌列入 table 黑名单并检查 views/routes 或从客户端删除令牌,以便客户端需要再次重新生成令牌。
注意:在有效负载本身中放置任何约束不是一个好主意,如果您不想使用黑名单方法,请使用其他令牌生成方案,例如 Hawk,其中生成的令牌保存在 DB/other 存储中解决方案 & 在 invalidate/logout 上已删除。
if you want to log out a user from all devices
1. keep a user-specific secret
key in DB and use the secret
key to create JWT token
2. Assign a new secret key
for the user, which will in effect invalidate all JWT tokens send to user/clients.
3. This can be useful when the user changed his/her password
因为已经回答了,黑名单是使 JWT 令牌无效的基本方法之一。但是,应该注意的是,除非出于某种原因需要保留所有令牌,否则应将列入黑名单的令牌保留在数据库或其他任何地方,直到其到期为止。
此外,让 JWT 令牌的有效期尽可能短很重要,这样在大多数情况下它们会很快被 flask-jwt
本身失效。例如,为令牌设定到期时间可能是有意义的 - 30 分钟,例如某些网站的会话超时(绝对不是几天和几个月等)。
检查 flask-jwt-extended。它支持扩展中内置的黑名单令牌(并且仍然得到积极支持,与已被放弃的 flask jwt 不同)。
https://flask-jwt-extended.readthedocs.io/en/stable/blacklist_and_token_revoking/
一种选择是在生成令牌时将 jwt_token
存储在 User
模型中。
class User(db.Model):
...
...
jwt_token = db.Column(db.String(128), nullable=True)
并在验证传入请求时,将传入令牌与存储的 jwt_token
进行比较。它们应该相同(当然还有其他验证)
要注销,只需将 jwt_token
字段设置为 None
。它将不再与传入令牌匹配
我已经为用户身份验证生成了 Flask-JWT 令牌,但在注销时我想使令牌无效。现在允许登出后访问路由
@app.route('/logout', methods=['POST'])
@jwt_required
def logout():
user = current_user
user.authenticated = False
db.session.commit()
logout_user()
return jsonify({'success': True})
JWT
令牌系统的工作方式是将用户身份(或相关)数据和令牌到期参数放入生成的令牌本身,该令牌本身是用非共享(秘密)签名的 key.If您想要使令牌无效,您需要将令牌列入 table 黑名单并检查 views/routes 或从客户端删除令牌,以便客户端需要再次重新生成令牌。
注意:在有效负载本身中放置任何约束不是一个好主意,如果您不想使用黑名单方法,请使用其他令牌生成方案,例如 Hawk,其中生成的令牌保存在 DB/other 存储中解决方案 & 在 invalidate/logout 上已删除。
if you want to log out a user from all devices
1. keep auser-specific secret
key in DB and use thesecret
key to create JWT token
2. Assigna new secret key
for the user, which will in effect invalidate all JWT tokens send to user/clients.
3. This can be useful when the user changed his/her password
因为已经回答了,黑名单是使 JWT 令牌无效的基本方法之一。但是,应该注意的是,除非出于某种原因需要保留所有令牌,否则应将列入黑名单的令牌保留在数据库或其他任何地方,直到其到期为止。
此外,让 JWT 令牌的有效期尽可能短很重要,这样在大多数情况下它们会很快被 flask-jwt
本身失效。例如,为令牌设定到期时间可能是有意义的 - 30 分钟,例如某些网站的会话超时(绝对不是几天和几个月等)。
检查 flask-jwt-extended。它支持扩展中内置的黑名单令牌(并且仍然得到积极支持,与已被放弃的 flask jwt 不同)。
https://flask-jwt-extended.readthedocs.io/en/stable/blacklist_and_token_revoking/
一种选择是在生成令牌时将 jwt_token
存储在 User
模型中。
class User(db.Model):
...
...
jwt_token = db.Column(db.String(128), nullable=True)
并在验证传入请求时,将传入令牌与存储的 jwt_token
进行比较。它们应该相同(当然还有其他验证)
要注销,只需将 jwt_token
字段设置为 None
。它将不再与传入令牌匹配