【发布时间】:2019-03-11 12:39:54
【问题描述】:
我已开始使用 AWS AppSync,但遇到了权限问题。
我使用 AppSync 为我的数据创建了一个 DynamoDB 表,并设置了与我已经创建的 Cognito 用户池一起使用的授权。
我将默认操作设置为 ALLOW,根据 AWS 文档 -https://docs.aws.amazon.com/appsync/latest/devguide/security.html#amazon-cognito-user-pools-authorization - 默认情况下,它应该允许公共访问运行我的架构中定义的任何查询/突变/订阅。
上面的文档还说限制访问是通过在我的类型定义中添加@aws_auth 来完成的。我还没有添加。
这就是我想要的:我希望我的查询是公开的 - 不需要添加 @aws_auth 指令 - 并且我的突变被限制在我的 Cognito 用户池中的 Admins 组中。因此,在测试查询时,我应该能够将数据返回给我,而无需在任何地方登录。
但是,当尝试在 AppSync 控制台中运行任何测试查询时,我收到以下错误消息:
{
"errors": [
{
"errorType": "UnauthorizedException",
"message": "Unable to parse JWT token."
}
]
}
显然,这与未使用 Cognito 登录有关。
我之前在没有使用 Cognito 授权的情况下测试过这些查询,它们都运行良好。由于我的 Cognito 授权方的默认操作设置为 ALLOW,因此我的查询现在应该运行相同,因为我没有修改它们。
查看我的查询、类型和解析器的代码,我看不出它们的编写方式有什么不同。允许访问我的 DynamoDB 表的 IAM 角色也保持不变,并且没有附加任何限制。
发生了什么事? AppSync 是否存在错误,或者我在这里遗漏了什么?
请告诉我。谢谢
【问题讨论】:
-
你找到解决办法了吗?
-
@Aldarund 截至目前,AppSync 似乎在使用 Cognito 进行身份验证时不支持公共访问。所以我制作了两个 AppSync 项目,一个使用 API 密钥供公众访问,另一个使用 Cognito 供管理员使用。但是可以使用 AWS IAM 允许混合访问公共和私有访问,但我还没有尝试过。
标签: amazon-web-services authorization graphql amazon-cognito aws-appsync