如何在AWS API Gateway内部传递后端API Token?
无需Lambda实现API Gateway内部获取并传递后端OAuth2 Token
实现步骤
1. 确认Cognito授权器生效
确保目标API方法已绑定Cognito用户池授权器,客户端请求时仅需携带Cognito的Access Token或ID Token在Authorization头中。授权器会自动验证Token有效性,仅通过验证的请求才会进入后续集成流程。
2. 配置API Gateway集成链(Integration Chaining)
利用API Gateway的集成链功能,可让单个API方法依次调用两个HTTP集成,全程无需Lambda:
第一阶段:调用独立Token生成API
- 进入API Gateway控制台的目标方法,打开集成请求设置
- 选择HTTP集成类型,填写Token生成API的地址(若为私有资源,需关联对应VPC Link)
- 设置与Token生成API匹配的请求方法(如POST)
- 在请求头/参数映射中,传递Token生成所需参数:
- 例如,若需用户标识,可映射请求头
X-User-ID为$context.authorizer.claims.sub(从Cognito授权器的上下文提取用户唯一ID) - 其他所需参数可从
$context.authorizer或客户端请求中提取
- 例如,若需用户标识,可映射请求头
- 配置集成响应,确保能正确解析Token生成API返回的JSON响应(需确认返回的Token字段名,如
access_token)
第二阶段:转发请求到后端私有API
- 在同一方法的集成设置中添加第二个集成(集成链最多支持2个步骤)
- 选择HTTP集成类型,填写后端私有API地址并关联对应VPC Link
- 设置与后端API匹配的请求方法
- 在请求头映射中,将第一阶段获取的Token注入后端API所需的认证头:
- 例如,映射
Authorization头为Bearer $input.path('$.access_token')(假设Token生成API返回的JSON中access_token是目标字段)
- 例如,映射
- 配置集成响应,直接将后端API的响应返回给客户端
流程验证:用Postman调用API Gateway端点时,只需携带Cognito Token,API Gateway会自动完成:Cognito验证 → 调用Token生成API获取后端Token → 携带Token转发到后端API → 返回响应给客户端。
方案对比:内部传递vs客户端传双Token
推荐内部传递Token的核心原因
- 安全层面:客户端无需接触后端API的OAuth2凭证,减少Token泄露风险;API Gateway统一管控Token的获取和传递,便于审计
- 开发效率:客户端仅需维护Cognito一套认证逻辑,无需处理两种Token的过期、刷新,降低开发复杂度
- 架构解耦:后端API或认证规则变更时,仅需修改API Gateway配置,无需调整客户端代码
- 体验优化:客户端请求只需携带一个Token,减少请求冗余
不推荐客户端传双Token的场景
- 客户端需同时维护两套Token的生命周期管理,开发成本高
- 双Token传递增加了敏感凭证泄露的概率
- 架构耦合度高,后端或Cognito的认证规则变更时,客户端需同步修改
内容的提问来源于stack exchange,提问作者Sakshi
相关产品推荐
相关产品推荐

