【问题标题】:AWS AppSync - Unauthorized ExceptionAWS AppSync - 未经授权的异常
【发布时间】: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


【解决方案1】:

我认为您的 API 密钥过期日期已经结束。所以转到 -- API -> 选择您的 AppSync -> 转到设置 -> 选择您的 API 密钥 -> 然后编辑 -> 现在您处于“配置您的 API 密钥并更改到期日期”中。 -> 选择过期 选择此 API 密钥何时到期 在这里,您可以选择自创建新 API 密钥之日起 1 年。

【讨论】:

  • 将授权类型设置为 Amazon Cognito 用户池,API 密钥默认设置为无。答案具有误导性。
  • 未授权异常来自密钥已过期或在 DynamoDB 表中使用的查询中缺少某些参数。上面的答案没有误导。@Cris69
  • 谢谢。 (转到 Appsync -> API ...)
  • 答案具有误导性。 cognito和api key有什么关系?
【解决方案2】:

您是在“查询”控制台中谈论的吗?即使您已登录 AWS 账户并转到 AWS AppSync 查询控制台,您仍需要以 cognito 用户身份单独登录。点击“使用用户池登录”按钮。

从那里,只需输入您已经创建的 cognito 用户的信息,这将模拟登录以进行测试。您可以在项目中的 aws-exports.js 文件中找到您的 clientId:“aws_user_pools_web_client_id”。

希望有帮助!

【讨论】:

  • 您可以从查询控制台发送 x-api-key 值吗?
猜你喜欢
  • 2018-07-04
  • 2012-02-22
  • 2014-07-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
  • 2018-08-21
  • 2020-05-30
相关资源
最近更新 更多