Amplify @auth规则疑问:public权限无法通过API Key访问listTodos
解决Amplify @auth规则中allow: public无法通过API Key访问的问题
问题场景
搭建测试Amplify @auth规则的基础应用,GraphQL Schema中Todo类型配置了@auth(rules: [{ allow: public }]),Blog类型配置了@auth(rules: [{ allow: owner }])。API默认认证方式为Cognito用户池,API Key作为二级认证类型。执行列表查询时,Blog查询成功,但Todo返回权限错误:Not Authorized to access listTodos on type Query,预期allow: public允许API Key访问但未生效。
解决方案
显式指定public规则的认证提供者
当API默认认证为Cognito时,allow: public不会自动关联到API Key,需要在@auth规则里显式添加provider: apiKey参数,修改后的Schema如下:type Todo @model @auth(rules: [{ allow: public, provider: apiKey }]) { id: ID! name: String! description: String }重新部署API
修改Schema后,执行命令重新推送API配置:amplify push api等待部署完成,让AppSync更新对应的权限规则。
确认API Key状态与请求认证方式
- 打开AppSync控制台,进入你的API,检查设置->认证里的API Key是否启用且未过期。
- 在AppSync控制台执行
listTodos查询时,选择认证类型为API Key,并填入有效的API Key值;如果是客户端请求,确保请求头包含x-api-key字段,值为你的API Key。
验证认证类型配置
再次通过amplify update api确认API Key已被添加为二级认证类型,避免配置遗漏。
内容的提问来源于stack exchange,提问作者JimmyTheCode
相关产品推荐
相关产品推荐

