AWS SAM部署API Gateway配置Cognito授权出现invalid_grant错误
问题排查解决步骤
1. 优先排查请求格式错误
你当前的curl命令将grant_type和scope参数放在URL查询串中,不符合Cognito OAuth2接口的要求,这是触发invalid_grant报错的最常见原因。Cognito的/oauth2/token接口要求认证参数必须放在表单请求体中,修改curl命令为如下格式即可:
curl -X POST --user <clientId>:<secret> 'https://<URL>.auth.eu-west-1.amazoncognito.com/oauth2/token' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'grant_type=client_credentials&scope=i010-develop-server/read'
2. 校验Cognito侧配置一致性
- 确认SAM部署后Cognito控制台中的实际配置和模板定义一致:重点检查User Pool Client的
AllowedOAuthFlows已开启client_credentials,AllowedOAuthScopes包含你请求中使用的完整scope(即<资源服务器标识>/read) - 确认你使用的Client ID、Client Secret没有复制错误,Client Secret一旦生成后不会在控制台二次展示,如有疑问可重新生成新的Secret再测试
- 确认资源服务器的Identifier配置正确,你模板中定义的Identifier为
${pPipelineCode}-${pGITBranch}-server,要和请求scope中的前缀完全匹配,变量替换错误会直接导致scope校验失败
3. 校验API Gateway侧配置
如果修改请求格式后已能正常获取token,但调用API时报错,再检查如下配置:
- 你当前授权器配置中的
AuthorizationScopes字段里的write没有携带资源服务器标识,属于无效配置,需要修改为完整格式i010-develop-server/write - 确认通过
ImportValue导入的Cognito用户池ARN和你实际使用的用户池一致,不要导入错其他环境的资源ARN - 如果你启用了注释掉的Identity头配置,调用API时需要保证Authorization头的格式为
Bearer <token>,前缀缺失会导致授权器无法正常提取token
4. 兜底排查方案
如果以上配置全部正确还是报错,开启Cognito用户池的CloudWatch日志功能,从日志中可以查看具体的错误原因(如scope不匹配、客户端不存在、参数非法等)。
内容的提问来源于stack exchange,提问作者ck3mp
相关产品推荐
相关产品推荐

