如何实现烧瓶restplus授权

时间:2019-09-29 15:07:58

标签: flask token flask-restplus

我正在尝试在flask-restplus应用程序中设置身份验证。我想向应用程序中的所有端点添加身份验证,但不想在每条路由上编写装饰器。

我正在寻找基于apikey的身份验证。问题是,我无法确定如何拦截所有请求并检查标头中的身份验证令牌。

当前代码:

authorization = {
    'apikey': {
        'type': 'apiKey',
        'in': 'header',
        'name': 'x-auth'
    }
}
api = Api(title='title',
          version='1.0',
              description="List of API's ", 
validate=True, authorizations=authorization, security='apikey')

完成上述步骤后,当我打开招摇时,可以使用授权按钮添加令牌。但是一旦令牌通过,我将无法拦截请求并验证令牌是否正确。

目前,我能找到的所有示例都在我不需要的每条路线上添加了一个装饰器,因为这会导致不良的设计和重复的代码。

目前我得到的最接近的示例是:
https://www.youtube.com/watch?v=xF30i_A6cRw&list=LLpaDwEA6bAAPZU5lz0ZRsuw&index=1

但它还在每条路线上使用装饰器。

所以问题陈述是:

如何拦截所有请求并在其中的标题中检查正确的令牌,而无需在所有路由上添加装饰器

1 个答案:

答案 0 :(得分:0)

最近,我遇到了类似的问题。但是幸运的是,我们确实有一个接受装饰器列表的命名空间,您可以在其中传递资源级别的自定义装饰器,默认情况下,它将对该资源的每种方法实现。

api = Namespace(
    'some Name here',
    description='some description',
    security='apiKey',
    authorizations = authorizations,
    decorators= [token_required]
)

但是要注意一点,我只需要在方法中为每个文档指定安全性,如下所示:

@api.doc('some operation', security = 'apiKey')

这样做的好处是,一键授权流向资源中的每个方法。