Lambda授权器调用Cognito GetUser报错:Invalid Access Token 排查
Cognito GetUser接口Invalid Access Token错误分析与解决
问题根源
Cognito的GetUser接口必须使用Access Token调用,你传入ID Token的做法直接导致了这个报错。这两种Token的用途完全不同:
- ID Token:仅用于验证用户身份、获取用户基础身份信息,没有权限调用Cognito的用户管理类接口。
- Access Token:专门用于授权访问Cognito的用户相关操作接口,是
GetUser接口的合法凭证。
获取正确Access Token的方法
Lambda授权器的event结构取决于触发它的服务(比如API Gateway),以最常见的API Gateway TOKEN授权器为例:
- 前端登录Cognito时,要同时获取ID Token和Access Token(比如通过
Auth.signIn方法,返回的会话数据里会包含这两个Token)。 - 前端调用接口时,需要把Access Token放在Authorization请求头里,格式为
Bearer <你的Access Token>。 - 在Lambda授权器中,从
event["authorizationToken"]提取Access Token,注意去掉前缀:# 处理Authorization头,提取纯Access Token auth_token = event["authorizationToken"] access_token = auth_token.split(" ")[1] # 截取"Bearer "之后的内容
额外提醒
- 别搞混Cognito的三种Token:ID Token、Access Token、Refresh Token,每种的适用场景有严格区分,调用接口前一定要确认所需的Token类型。
- 调用
GetUser之前,可以先对Access Token做合法性校验(比如解析JWT验证签名、有效期),减少无效请求。
内容的提问来源于stack exchange,提问作者Javier Reyero Huerga
相关产品推荐
相关产品推荐

