You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按API Gateway阶段配置不同Cognito用户池授权器

解决方案:用API Gateway阶段变量实现多阶段动态Cognito授权

我之前刚好处理过一模一样的场景,不用自定义Lambda授权器,靠API Gateway自带的阶段变量就能实现每个阶段绑定对应Cognito用户池的需求。具体操作步骤如下:

1. 准备好各阶段的Cognito用户池

先确保你已经为Development、Testing、Production三个阶段创建了独立的Cognito用户池,并且记录下每个用户池的ARN(可以在Cognito控制台的用户池设置→“池详情”里找到)。

2. 创建引用阶段变量的Cognito授权器

在API Gateway控制台中:

  • 进入你的API,切换到“授权器”选项卡,点击“创建授权器”
  • 选择类型为Cognito用户池
  • 在“用户池”输入框里,不要直接选择具体的用户池,而是输入阶段变量引用:${stageVariables.userPoolArn}
  • 填写授权器名称(比如DynamicCognitoAuthorizer),按需配置令牌来源(通常是Authorization头)
  • 点击“创建”完成授权器创建

3. 为每个阶段配置对应的阶段变量

接下来给每个API阶段绑定对应的用户池ARN:

  • 进入API Gateway的“阶段”选项卡,选择第一个阶段(比如Development)
  • 切换到“阶段变量”选项卡,点击“添加阶段变量”
  • 设置变量名为userPoolArn,变量值为Development阶段对应的Cognito用户池ARN
  • 重复这个操作,分别给Testing和Production阶段配置各自的userPoolArn变量值

4. 为API方法绑定动态授权器

最后,把刚才创建的动态授权器附加到需要授权的API方法上:

  • 进入API Gateway的“资源”选项卡,选择需要授权的方法(比如GET /api/data)
  • 切换到“方法请求”选项卡,在“授权”下拉框中选择你创建的DynamicCognitoAuthorizer
  • 保存配置后,重新部署每个阶段的API(部署时要选择对应的阶段)

验证方式

可以用每个阶段对应的用户池生成的令牌,调用对应阶段的API端点:

  • 比如用Development用户池的用户JWT调用Development阶段的API,应该能正常通过授权
  • 用Production用户池的令牌调用Testing阶段的API,会返回授权失败,以此验证动态绑定是否生效

小提示:如果你的API需要用到用户池的自定义作用域,也可以用阶段变量来动态配置,比如${stageVariables.userPoolScope},灵活度很高。

内容的提问来源于stack exchange,提问作者vitors

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:26:09