如何在API Gateway V2配置Cognito授权器并开放池内所有客户端访问?
在API Gateway V2中实现Cognito用户池全客户端开放访问的方案
方案1:用Lambda授权器替代JWT授权器
这是最灵活的实现方式,能完全复刻V1中Cognito授权器的开放逻辑:
- 编写一个Lambda函数,负责验证请求头里的Cognito访问令牌:
- 从
Authorization头提取令牌,通过Cognito的VerifyTokenAPI(或本地JWT库)验证签名有效性 - 检查令牌的
iss字段是否匹配目标用户池的颁发者URL,确保令牌来自指定用户池 - 跳过
client_id的校验,只要令牌有效且属于目标用户池,就返回允许访问的IAM政策
- 从
- 在API Gateway V2中创建Lambda授权器,关联该函数,设置令牌来源为
Authorization头 - 这种方式不受V2 JWT授权器的Audience限制,用户池内所有客户端生成的访问令牌都能通过验证
方案2:JWT授权器的变通方案(适合客户端数量少的场景)
如果不想切换到Lambda授权器,可以用以下方式绕过单客户端限制:
- 在JWT授权器的Audience字段中,填入用户池内所有客户端的
client_id(多个值用逗号分隔) - API Gateway V2会验证令牌的
client_id是否在Audience列表中,只要是列表内的客户端生成的令牌,都能通过校验 - 缺点是后续新增客户端时,需要手动更新授权器的Audience列表,维护成本会随客户端数量增加而上升
额外说明
- Cognito访问令牌本身没有
aud字段,API Gateway V2的JWT授权器会默认强制校验client_id与Audience的匹配关系,这是V2和V1的核心差异点 - 如果业务场景允许使用Cognito ID令牌,ID令牌包含
aud字段(值为对应客户端的client_id),但ID令牌侧重身份认证,而非API授权访问,需根据实际需求判断是否适用
内容的提问来源于stack exchange,提问作者Ranieri Mazili
相关产品推荐
相关产品推荐

