AWS Amplify AppSync IAM 401错误求助:GraphQL请求失败
解决GraphQLError: Request failed with status code 401(AWS Amplify + AppSync)
遇到401错误基本都是权限配置不匹配导致的,结合你的操作流程和代码,咱们一步步排查:
1. 先确认IAM角色的API访问权限
Amplify CLI自动配置时会生成两个关键IAM角色:
- 用于API操作的
amplify-<你的项目名>-<环境名>-<数字>-apiRole - Cognito身份池对应的未认证角色和认证角色
你需要在IAM控制台检查这些角色是否附加了允许访问AppSync API的策略:
- 策略里需要包含
appsync:GraphQL动作,资源指向你的AppSync API的ARN(格式类似arn:aws:appsync:<区域>:<账号ID>:apis/<API ID>/*) - 如果是给未认证用户访问,要确保身份池的未认证角色有这个权限
2. 检查GraphQL Schema的权限规则
默认情况下,Amplify的@model类型不会开放公共访问权限。你需要在schema.graphql里给Keyword类型添加@auth指令,明确允许访问的主体:
type Keyword @model @auth(rules: [{ allow: public }]) { id: ID! name: String! }
如果只允许认证用户访问,就改成{ allow: private },然后重新部署API(amplify push)。
3. 验证AppSync解析器是否正常
虽然401不是解析器缺失的典型错误,但还是要确认:
- 登录AppSync控制台,找到你的API,进入解析器页面
- 检查Query类型下的
listKeyword解析器是否存在,并且数据源关联的是对应的DynamoDB表 - 如果解析器缺失,重新执行
amplify push让Amplify自动生成
4. 确认前端配置的正确性
检查aws-exports.js里的关键配置:
aws_appsync_authenticationType:如果是IAM,Amplify会自动从Cognito身份池获取临时凭证,确保身份池配置正常aws_appsync_graphqlEndpoint和aws_appsync_region是否和你的AppSync API一致
快速测试方法
直接在AppSync控制台的查询页面,选择IAM认证方式,执行你的ListKeywords查询:
- 如果控制台也返回401:说明后端权限配置有问题,回到步骤1和2排查
- 如果控制台能成功返回数据:说明前端获取凭证的流程有问题,检查Amplify初始化是否正确,或者是否有Cognito身份池的配置遗漏
内容的提问来源于stack exchange,提问作者stampede76
相关产品推荐
相关产品推荐

