AWS Cognito授权器验证异常:Access Token返回401,IdToken返回200
问题排查:Cognito授权器无法验证Access Token但可正常验证IdToken
可能原因及对应解决步骤
1. Access Token受众(Audience)不匹配
- Cognito Access Token的
aud字段默认是用户池的客户端ID,但API Gateway的Cognito授权器默认会验证用户池ID作为受众,两者不匹配就会导致验证失败。 - 解决:进入API Gateway的授权器配置页面,将**受众(Audience)**设置为你的Cognito用户池客户端ID;如果有多个客户端,用逗号分隔多个ID。
2. 签名验证的Issuer配置错误
- Access Token的
iss字段格式为https://cognito-idp.<区域>.amazonaws.com/<用户池ID>,如果授权器配置的提供商名称与该值不一致,会导致签名验证失败。 - 解决:确认授权器的提供商名称填写的是正确的用户池Issuer URL,不要遗漏区域代码或用户池ID。
3. Token来源配置与实际传递位置不符
- 若你在请求中把Access Token放在了授权器未指定的位置(比如错误的HTTP Header),授权器无法正确提取Token进行验证。
- 解决:检查授权器的Token来源配置,确保它指向你传递Access Token的Header(通常是
Authorization,传递格式为Bearer <Access Token>)。
4. 权限范围(Scope)未正确配置
- 如果API Gateway的资源方法设置了OAuth范围验证,但Access Token未包含对应的scope,会触发验证失败。
- 解决:
- 在Cognito用户池客户端中启用需要的scope(比如
aws.cognito.signin.user.admin或自定义scope); - 在API Gateway的对应资源方法设置中,将OAuth范围设为匹配的scope值;
- 确保获取Access Token时的请求中指定了正确的scope参数。
- 在Cognito用户池客户端中启用需要的scope(比如
5. Access Token本身无效
- 检查Access Token是否过期(查看Token中的
exp字段)、是否被篡改,或者请求中是否缺少Bearer前缀导致格式错误。 - 解决:重新获取有效的Access Token,确保请求中使用
Bearer <Token>的正确格式传递。
内容的提问来源于stack exchange,提问作者Agus Mathew
相关产品推荐
相关产品推荐

