基于AWS Cognito用户池的多租户:HTTP API Gateway多用户池JWT授权咨询
解决方案:HTTP API Gateway 多Cognito用户池身份验证
方案1:自定义Lambda Authorizer替代原生JWT Authorizer
- 编写Lambda函数处理多用户池的JWT验证逻辑:
- 从请求头提取
Authorization字段中的Bearer Token - 预存所有目标Cognito用户池的签发者(
iss)与JWKS密钥集(可缓存密钥集降低性能损耗) - 依次用每个用户池的密钥验证Token的签名、过期时间、受众(Audience)等核心字段
- 验证通过后,返回符合HTTP API要求的IAM策略,同时可注入租户ID等自定义上下文信息
- 从请求头提取
- 关键注意事项:
- 严格校验Token的
iss字段,确保仅匹配对应租户的用户池,杜绝跨租户越权 - 处理Token验证失败的分支,返回明确的拒绝策略
- 实现JWKS密钥缓存机制,避免重复请求Cognito服务
- 严格校验Token的
方案2:通过Cognito联合身份池统一身份源
- 将多个Cognito用户池配置为联合身份池的身份提供者:
- 创建Cognito联合身份池,添加所有需要的用户池作为身份源
- 用户通过各自租户的用户池获取Token后,调用联合身份池API交换为统一的身份凭证
- HTTP API的JWT Authorizer配置为验证联合身份池签发的Token
- 优势:复用HTTP API原生JWT Authorizer能力,无需编写复杂的自定义验证逻辑
- 限制:需额外处理Token交换流程,且需通过联合身份池的权限配置严格隔离不同租户
方案3:按租户拆分路由/阶段绑定独立JWT Authorizer
- 为每个租户创建专属的JWT Authorizer并绑定到对应路由或阶段:
- 针对每个租户的用户池,创建单独的HTTP API JWT Authorizer
- 配置租户专属路由(如
/tenant-a/*、/tenant-b/*),分别绑定对应的Authorizer - 前端根据租户标识请求对应路由,确保Token与Authorizer匹配
- 适用场景:租户数量较少,路由结构可按租户清晰拆分的场景
内容的提问来源于stack exchange,提问作者Syma
相关产品推荐
相关产品推荐

