跳转至

安全认证

首先阅读基本用法中的 这一部分 来了解安全认证支持的基础知识。

安全认证支持的基本概念:

  • APIFlask 使用 Flask-HTTPAuth 来实现认证支持。
  • 使用 apiflask.HTTPBasicAuth 来进行 HTTP 基本身份验证(HTTP Basic Auth)。
  • 使用 apiflask.HTTPTokenAuth 来进行 HTTP Bearer 或 API 密钥认证。
  • 阅读 Flask-HTTPAuth 的文档 来实现各种安全认证方式。
  • 请确保从 APIFlask 导入 HTTPBasicAuthHTTPTokenAuth 并使用 app.auth_required 装饰器来保护视图。
  • auth.current_user 的工作方式与 auth.current_user() 类似,但长度更短。

使用外部安全认证库

Version >= 1.0.0

这个特性在 1.0.0 版本 中添加。

使用 HTTPBasicAuthHTTPTokenAuthapp.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(PetInSchema)
@app.output(PetOutSchema, 201)
@app.doc(security='ApiKeyAuth')
def create_pet(data):
    pet_id = len(pets)
    data['id'] = pet_id
    pets.append(data)
    return pets[pet_id]

处理安全认证错误

请参见错误处理章节中的 这一部分 来处理安全认证错误。