GCP API Gateway Swagger配置未正确校验API密钥的问题解决
问题原因及解决步骤
核心问题
你的API Gateway未正确验证API密钥,主要有两个原因:
- Swagger配置中定义的API密钥请求头名称与实际调用时传递的不一致
- 未将创建的API密钥与API Gateway的API资源绑定
步骤1:修正Swagger配置
将securityDefinitions中的请求头名称改为你实际传递的X-goog-api-key,确保配置和调用逻辑一致。修正后的完整Swagger示例如下:
swagger: '2.0' info: title: api-1 description: API Gateway First for Testing version: 1.0.0 securityDefinitions: api_key_header: type: apiKey name: X-goog-api-key # 与调用时的请求头名称保持一致 in: header schemes: - https produces: - application/json paths: /endpoint1: post: summary: Simple echo service operationId: echo-1 x-google-backend: address: https://<CLOUD FUNCTION GEN 2 NAME>-<MORE IDENTIFYING INFO>-uc.a.run.app security: - api_key_header: [] # 启用该安全规则 responses: '200': description: OK
如果偏好使用自定义请求头(比如原配置中的key),则调用时需将请求头改为key: <你的API密钥>,而非X-goog-api-key。
步骤2:绑定API密钥到API Gateway的API
仅修改Swagger配置不足以生效,必须在GCP控制台完成密钥与API的关联:
- 进入GCP控制台「API和服务」→「凭据」页面
- 找到你创建的API密钥,点击编辑
- 在「API限制」区域选择「限制密钥」,从下拉列表中选中Swagger
title字段对应的API(即api-1) - 保存设置
步骤3:重新部署API Gateway
修改Swagger后,需重新部署API Gateway使配置生效:
gcloud api-gateway apis deployments create <部署名称> --api=<API名称> --openapi-spec=<修正后的Swagger文件路径> --project=<你的项目ID>
验证测试
完成上述步骤后,用curl测试验证效果:
- 不传API密钥:应返回401/403错误
- 传错误的API密钥:应返回401/403错误
- 传正确的API密钥:正常返回200响应
内容的提问来源于stack exchange,提问作者ChristianOConnor
相关产品推荐
相关产品推荐

