如何携带Cognito访问令牌调用AWS_IAM认证的Lambda Function URL
调用带IAM认证的Lambda Function URL传递Cognito Access Token的方案
核心结论
Lambda Function URL的IAM认证模式下,不能直接将Cognito用户池的access token放在Authorization头来完成认证。这种模式要求请求必须使用AWS Signature V4签名,和API Gateway的自定义认证逻辑完全不同。
Lambda Function URL的IAM认证调用规则(翻译自AWS官方文档)
当Lambda Function URL配置为IAM认证时,所有请求必须通过AWS Signature V4进行签名。你需要使用AWS SDK、AWS CLI或者手动生成符合规范的签名HTTP请求来调用,请求中要包含Signature V4格式的Authorization头,而非直接传入Cognito的access token。
可行替代方案
如果想通过Cognito的access token控制Lambda Function URL的访问,有两种落地方式:
- 切换认证模式为NONE,在Lambda代码内验证token:
- 将Function URL的认证类型设置为
NONE - 在Lambda函数代码中,从请求头提取
Authorization字段内的access token - 使用
aws-jwt-verify这类工具库,验证token的签名有效性、过期时间以及自定义权限声明
- 将Function URL的认证类型设置为
- 通过API Gateway代理请求:
- 配置API Gateway(HTTP或REST类型),启用Cognito用户池认证
- 将API Gateway的集成目标设置为Lambda Function URL(或直接集成Lambda)
- 客户端将Cognito access token放在Authorization头请求API Gateway,由网关完成认证后再转发请求到Lambda
内容的提问来源于stack exchange,提问作者Diego Dávila Vilchez
相关产品推荐
相关产品推荐

