【问题标题】:flask-jwt-extended: decorator @jwt.token_in_blacklist_loader always revoked tokenflask-jwt-extended:装饰器@jwt.token_in_blacklist_loader 总是撤销令牌
【发布时间】:2020-01-02 09:59:13
【问题描述】:

在我的 app.py 中,我初始化了 flask-jwt-extended 如下:

# Setup the Flask-JWT-Extended extension
app.config['RESTPLUS_MASK_SWAGGER'] = False # remove default X-Fields field in swagger
app.config['JWT_SECRET_KEY'] = 'super-secret'  # Change this!
app.config['JWT_BLACKLIST_ENABLED'] = True
app.config['JWT_BLACKLIST_TOKEN_CHECKS'] = ['access', 'refresh']
jwt = JWTManager(app)

然后我使用 sn-p 在登录中创建令牌:

            expires = datetime.timedelta(minutes=10)
            access_token = create_access_token(identity=payload['email'], fresh=True, expires_delta=expires)
            refresh_token = create_refresh_token(identity=payload['email'])

奇怪的是,如果我将装饰器 @jwt.token_in_blacklist_loader 添加到某个端点,我总是收到“令牌已被撤销”错误消息。

@jwt.token_in_blacklist_loader
@api.route('/')
class UserList(Resource):
    @jwt_required
    @api.doc('list_users')
    @api.marshal_list_with(user)
    def get(self):
        '''Get all users'''
        users = UserApi.query.all()
        return users

据我所知,这个装饰器是检查令牌是否被列入黑名单,我只是从登录创建一个新令牌,创建新令牌并检查令牌是否被列入黑名单的最佳做法是什么?

【问题讨论】:

    标签: python flask flask-jwt-extended


    【解决方案1】:

    来自flask-jwt-extended的文档:

    这个装饰器设置回调函数,当一个 受保护的端点被访问,并将检查 JWT 是否已被 撤销。默认不使用该回调。

    提示:回调必须是一个接受一个参数的函数, 是解码的 JWT(python 字典),如果 令牌已被列入黑名单(或被视为撤销),或 False 否则。

    token_in_blacklist_loader 装饰器用于在访问受保护的端点时设置回调函数。你应该在检查你的令牌是否被列入黑名单的函数上使用这个装饰器。使用内存保存列入黑名单的令牌的简单示例:

    blacklist = set()
    @jwt.token_in_blacklist_loader
    def check_if_token_in_blacklist(decrypted_token):
        jti = decrypted_token['jti']
        return jti in blacklist
    

    有关更多信息,请查看此处的示例:https://flask-jwt-extended.readthedocs.io/en/stable/blacklist_and_token_revoking/

    【讨论】:

      【解决方案2】:

      您是否记得将新生成的 access_token(来自 refresh_token)添加到黑名单数据库?假定黑名单数据库中缺少的所有令牌都已被撤销...

      【讨论】:

      • 请把它变成一个自信的答案,以避免你问一个问题。考虑做出一个有条件的回答,比如“如果问题是……那么解决方案就是……”。
      猜你喜欢
      • 2015-11-02
      • 2020-05-17
      • 2015-12-13
      • 2016-06-16
      • 2020-02-04
      • 2019-01-26
      • 1970-01-01
      • 2021-02-09
      相关资源
      最近更新 更多