flask-jwt-extended - 捕获引发 RevokedTokenError('令牌已被撤销')

Mhe*_*ian 1 token jwt bearer-token flask-jwt-extended

我已经尝试阅读文档并尝试更改默认行为https://flask-jwt-extended.readthedocs.io/en/latest/changing_default_behavior.html来处理错误(该链接显示了如何处理过期的令牌)和在谷歌中搜索我能做的每个关键字组合中的所有内容,但似乎没有人有这方面的例子。

我尝试使用 @jwt.revoked_token_loader 来处理 RevokedTokenError 但它似乎不起作用,因为我像这样应用它

    @jwt.revoked_token_loader
        def revoked_token_response(revoked_token):
            jwtkn = revoked_token['jti']
            return jsonsify({
                'msg': 'token {} already been revoked!'.format(jwtkn)
            )}, 401
Run Code Online (Sandbox Code Playgroud)

实际上,我不知道处理过期令牌的链接上的示例如何具有“expired_token”参数,这种自我声明是否像我上面在“revoked_token”上所做的那样?据我所知,“jti”就像flask-jwt-extended包中的默认值,因为每当我不使用它时我都会看到错误(在我的数据库中,它是不同的,但根本没有问题。

我尝试按照本教程进行操作,在我这边效果很好(以及他的原始代码源),但我发现这个在撤销令牌上也没有捕获异常https://codeburst.io/jwt-authorization-烧瓶内-c63c1acf4eeb

我使用邮递员,如果基于教程链接,这就是我如何得到这个

    i do login
    i use the access token generated to access protected routes ('/secrets')
    i do logout
    i use again the access token generated to access protected routes
Run Code Online (Sandbox Code Playgroud)

在最后一个之后,我在服务器端(ide)收到此错误:

    ....flask_jwt_extended\utils.py", line 216, in verify_token_not_blacklisted
        raise RevokedTokenError('Token has been revoked')
    flask_jwt_extended.exceptions.RevokedTokenError: Token has been revoked
    127.0.0.1 -- [02/Jul/2019 22:25:26] "GET /secrets HTTP/1.1" 500 -
Run Code Online (Sandbox Code Playgroud)

在邮递员中,这就是我得到的:

    {
        'message': 'Internal Server Error'
    }
Run Code Online (Sandbox Code Playgroud)

我的目标是发送自定义 json 响应而不是“内部服务器错误”

编辑:我不是编程之类的专家,而是一个想要练习有关安全 Web 开发的 Python 的初学者。我还不太明白装饰器在应用程序等方面是如何工作的,所以我不知道其他人是否调整了flask-jwt-扩展包来解决这些问题。

vim*_*loc 5

返回 500 错误通常是由于其他 Flask 扩展中的错误以及它与本机 Flask 错误处理程序的交互方式而发生的。你可以在这里找到很多关于它的讨论(https://github.com/vimalloc/flask-jwt-extended/issues/86app.config['PROPAGATE_EXCEPTIONS'] = True ),但是如果使用像 Flask- 这样的东西,你可能需要设置 tl;dr 版本Restul,或者如果使用 Flask-restplus,则使用这样的 hack:

jwt = JWTManager(app)
api = Api()
jwt._set_error_handler_callbacks(api)
Run Code Online (Sandbox Code Playgroud)

如果这些对您没有帮助,请查看链接的 github 问题,如果其中没有任何帮助,请在该问题中回复详细说明您的设置。

干杯。