APIFlask中如何用认证保护自动生成的Swagger相关端点?
保护APIFlask自动生成的Swagger UI和OpenAPI端点方案
以下是几种适配你现有JWT认证体系的可行实现方式:
方案一:重写视图函数添加认证装饰器
APIFlask自动注册的/docs和/openapi.json对应内部预设的视图函数,你可以直接获取这些视图并绑定JWT认证装饰器:
from apiflask import APIFlask from flask_jwt_extended import jwt_required app = APIFlask(__name__) # 为Swagger UI端点添加JWT认证 docs_view = app.view_functions['docs'] app.view_functions['docs'] = jwt_required()(docs_view) # 为OpenAPI规格端点添加JWT认证 openapi_view = app.view_functions['openapi'] app.view_functions['openapi'] = jwt_required()(openapi_view) # 你的其他配置与自定义端点代码...
方案二:全局请求钩子验证
通过Flask的before_request钩子,在请求到达时检查目标路径是否为需保护的端点,强制验证JWT有效性:
from apiflask import APIFlask from flask_jwt_extended import verify_jwt_in_request from flask import abort, request app = APIFlask(__name__) @app.before_request def protect_docs_endpoints(): protected_paths = ['/docs', '/openapi.json'] if request.path in protected_paths: try: # 验证JWT,无效时自动抛出异常 verify_jwt_in_request() # 若需额外权限校验,可添加如下逻辑 # claims = get_jwt() # if not claims.get('admin'): # abort(403, description="无访问权限") except Exception: abort(401, description="请提供有效的JWT Token") # 你的其他配置与自定义端点代码...
补充:配置Swagger UI支持Token输入
为了让用户能在Swagger UI界面直接输入JWT Token,需在APIFlask配置中添加OpenAPI安全方案,Swagger UI会自动生成认证按钮:
app.config['OPENAPI_SECURITY_SCHEMES'] = { 'BearerAuth': { 'type': 'http', 'scheme': 'bearer', 'bearerFormat': 'JWT' } } # 全局启用该安全方案,也可针对单个端点单独配置 app.config['OPENAPI_SECURITY'] = [{'BearerAuth': []}]
用户在Swagger UI点击「Authorize」按钮输入Token后,访问/docs和/openapi.json时会自动携带Authorization请求头,与你的JWT认证逻辑兼容。
内容的提问来源于stack exchange,提问作者odigity
相关产品推荐
相关产品推荐

