我正在尝试在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
但它还在每条路线上使用装饰器。
所以问题陈述是:
如何拦截所有请求并在其中的标题中检查正确的令牌,而无需在所有路由上添加装饰器
答案 0 :(得分:0)
最近,我遇到了类似的问题。但是幸运的是,我们确实有一个接受装饰器列表的命名空间,您可以在其中传递资源级别的自定义装饰器,默认情况下,它将对该资源的每种方法实现。
api = Namespace(
'some Name here',
description='some description',
security='apiKey',
authorizations = authorizations,
decorators= [token_required]
)
但是要注意一点,我只需要在方法中为每个文档指定安全性,如下所示:
@api.doc('some operation', security = 'apiKey')
这样做的好处是,一键授权流向资源中的每个方法。