安全认证¶
首先阅读基本用法中的 这一部分 来了解安全认证支持的基础知识。
安全认证支持的基本概念:
- APIFlask 使用 Flask-HTTPAuth 来实现认证支持。
- 使用
apiflask.HTTPBasicAuth
来进行 HTTP 基本身份验证(HTTP Basic Auth)。 - 使用
apiflask.HTTPTokenAuth
来进行 HTTP Bearer 或 API 密钥认证。 - 阅读 Flask-HTTPAuth 的文档 来实现各种安全认证方式。
- 请确保从 APIFlask 导入
HTTPBasicAuth
和HTTPTokenAuth
并使用app.auth_required
装饰器来保护视图。 auth.current_user
的工作方式与auth.current_user()
类似,但长度更短。
使用外部安全认证库¶
Version >= 1.0.0
这个特性在 1.0.0 版本 中添加。
使用 HTTPBasicAuth
、HTTPTokenAuth
和 app.auth_required
实现安全认证时,APIFlask 可以自动生成 OpenAPI 安全规范。当你使用外部安全认证库,APIFlask 仍然提供手动设置 OpenAPI 规范的方式。
你可以使用 SECURITY_SCHEMES
配置或 app.security_schemes
属性来设置 OpenAPI security scheme:
app = APIFlask(__name__)
app.security_schemes = { # 等同于 SECURITY_SCHEMES 配置
'ApiKeyAuth': {
'type': 'apiKey',
'in': 'header',
'name': 'X-API-Key',
}
}
app.doc()
装饰器中使用 security
参数设置 security scheme:
@app.post('/pets')
@my_auth_lib.protect # 使用外部安全认证库提供的装饰器保护路由
@app.input(PetIn)
@app.output(PetOut, status_code=201)
@app.doc(security='ApiKeyAuth')
def create_pet(json_data):
pet_id = len(pets)
json_data['id'] = pet_id
pets.append(json_data)
return pets[pet_id]
从 APIFlask 1.0.2 开始,当同时使用内置认证支持和外部认证库时,安全方案(security schemes)将会被合并。
app.auth_required
会自动生成操作的安全性(operation security),如果你在已经使用了 app.auth_required
的视图中使用了 @doc(security=...)
,那么 @doc(security=...)
中传递的值将会被使用。
处理安全认证错误¶
请参见错误处理章节中的 这一部分 来处理安全认证错误。