Flask+AWS Lambda+Zappa架构下API Key豁免Swagger端点配置咨询
当然可行!这里有两种适配你技术栈的配置方案
方案一:通过Zappa配置文件实现(推荐,保持部署一致性)
既然你已经在zappa_settings.json里开了全局的"api_key_required": true,我们可以通过events字段为Flasgger相关端点单独设置豁免规则,覆盖全局验证要求。
直接修改你的配置文件,加入以下内容:
{ "dev": { "app_function": "你的Flask应用入口(比如myapp.app)", "api_key_required": true, "events": [ // 豁免Flasgger所有相关端点的API Key验证 { "http": { "method": "GET", "path": "/apidocs", "api_key_required": false } }, { "http": { "method": "GET", "path": "/apidocs/{proxy+}", "api_key_required": false } }, { "http": { "method": "GET", "path": "/apispec_1.json", "api_key_required": false } }, { "http": { "method": "GET", "path": "/flasgger_static", "api_key_required": false } }, { "http": { "method": "GET", "path": "/flasgger_static/{proxy+}", "api_key_required": false } }, // 其余所有端点继承全局API Key验证要求 { "http": { "method": "ANY", "path": "/{proxy+}", "api_key_required": true } } ] } }
改完之后执行zappa update dev(把dev换成你的Zappa环境名),Zappa会自动同步配置到AWS API Gateway,无需手动控制台操作。
方案二:直接在AWS API Gateway控制台手动调整
如果你暂时不想改Zappa配置,也可以直接在控制台修改资源的验证规则:
- 登录AWS控制台,找到API Gateway服务,定位到Zappa为你创建的API(名字通常和你的Zappa环境对应)。
- 左侧选资源,逐个找到需要豁免的Flasgger端点:
- 点击目标资源(比如
/apidocs),再选方法请求。 - 在设置区域找到API Key Required,把它从
true改成false,记得保存。 - 对于带
{proxy+}的子资源(比如/apidocs/{proxy+}),要单独进入对应的方法请求做同样修改。
- 点击目标资源(比如
- 所有豁免端点改完后,一定要点击顶部的部署API,选择对应的阶段(比如dev),让配置生效。
补充:API Key的创建与关联
你提到没在Flask里设置API Key——没错,API Key的管理完全在AWS控制台操作:
- 在API Gateway控制台左侧选API Keys,点击创建API Key,填个名称,选择生成自动创建密钥,务必保存好密钥值(一旦离开页面就没法再查看了)。
- 接下来要把密钥和你的API关联:
- 左侧选使用计划,新建一个使用计划,填好名称,添加你的API和对应阶段。
- 进入使用计划的API Keys标签页,点击添加API Key,选中刚才创建的密钥完成关联。
之后客户端请求需要验证的端点时,只要在请求头里带上x-api-key: 你的API密钥值就能通过验证了。
内容的提问来源于stack exchange,提问作者scagbackbone
相关产品推荐
相关产品推荐

