AWS Amplify AppSync改默认授权为IAM后API返回401/403如何解决
你遗漏的配置分为3个核心部分,按顺序操作即可解决报错:
1. 同步Amplify项目与云端的认证配置
你仅在AppSync控制台修改了默认授权模式,需要先确保本地Amplify配置和云端一致:
- 如果你习惯通过Amplify CLI管理资源,直接修改
amplify/backend/api/<你的API名称>/cli-inputs.json中的defaultAuthenticationType字段为AWS_IAM,再执行amplify push即可同步配置到云端,避免控制台修改被CLI配置覆盖 - 如果你确定要保留控制台的修改,执行
amplify pull拉取云端最新配置到本地即可
2. 补全IAM角色的AppSync访问权限
403报错基本都由权限缺失导致,IAM认证模式下需要给对应的访问角色开放API调用权限:
- 未登录的访客用户:给Amplify自动生成的
unauthRole添加AppSync访问权限 - 已登录的认证用户:给Amplify自动生成的
authRole添加AppSync访问权限
参考权限策略如下,替换为你自己的AppSync API ARN即可:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "appsync:GraphQL", "Resource": "arn:aws:appsync:<区域ID>:<账号ID>:apis/<API ID>/*" } ] }
如果你通过amplify push同步配置,Amplify会自动给对应角色生成上述权限,无需手动修改IAM。
3. 应用代码侧指定认证模式
API Key认证模式下无需额外指定凭证,切换为IAM后需要在代码中显式声明认证模式:
- Amplify v6版本在初始化时全局指定:
import { Amplify } from 'aws-amplify'; import amplifyconfig from './amplifyconfiguration.json'; Amplify.configure(amplifyconfig, { API: { GraphQL: { defaultAuthMode: 'iam' } } });
- Amplify v5及更早版本在调用API时指定:
import { API, graphqlOperation } from 'aws-amplify'; const res = await API.graphql({ ...graphqlOperation(你的查询/变更语句, { input: 参数 }), authMode: 'AWS_IAM' });
配置完成后重新构建部署应用即可解决401/403报错。
内容的提问来源于stack exchange,提问作者Alien13
相关产品推荐
相关产品推荐

