如何使GraphQL查询可在AWS App-Sync API中公开访问?

时间:2019-04-09 13:21:59

标签: amazon-web-services graphql aws-appsync aws-amplify

我正在尝试公开提供 GraphQL查询。 目前,我正在使用 Cognito用户池进行身份验证,但是现在只有登录用户才能访问查询和变异。

我知道GraphQL对象的@auth伪指令,它可能可以解决此类问题。但是我找不到任何有关如何使用它的文档或教程。

2 个答案:

答案 0 :(得分:1)

对于AppSync API-API密钥被视为“未经身份验证”

请参阅以下文档: https://docs.aws.amazon.com/appsync/latest/devguide/security.html#api-key-authorization

答案 1 :(得分:0)

我刚刚解决了这个完全相同的问题。这就是我所做的:

  1. 通过运行amplify update auth来更新您的API,然后选择IAM作为用户处理程序(其他所有设置均默认)

  2. 登录到您的AWS控制台-> Appsync并修改对IAM(而不是Cognito池)的访问权限

  3. 转到IAM控制台并为AUTH和UNAUTH用户创建IAM策略(通过输入Appsync应用的名称在列表中搜索它们)

找到AUTH用户并附加以下策略(使用您的信息进行更新):

授权用户

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "appsync:GraphQL",
            "Resource": [
                "arn:aws:appsync:<AWS region>:<AWS account ID>:apis/<app sync endpoint ID>/*"
            ]
        }
    ]
}

找到未认证用户并附加以下策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "appsync:GraphQL",
            "Resource": [
                "arn:aws:appsync:<AWS region>:<AWS account ID>:apis/<app sync endpoint ID>/types/Query/fields/<your Query name>",
        "arn:aws:appsync:<AWS region>:<AWS account ID>:apis/<app sync endpoint ID>/types/Query/fields/<your Query name>",
        "arn:aws:appsync:<AWS region>:<AWS account ID>:apis/<app sync endpoint ID>/types/Query/fields/<your Query name>"

            ]
        }
    ]
}
  1. 现在没有记录的东西(人们从Cognito池过渡到IAM),您需要导入{AUTH_TYPE}

import AWSAppSyncClient, {AUTH_TYPE} from "aws-appsync";

并使用它在AppSync初始化中加载凭据

const client = new AWSAppSyncClient(
  {
    disableOffline: true,
    url: aws_config.aws_appsync_graphqlEndpoint,
    region: aws_config.aws_cognito_region,
    auth: {
      // IAM
      type: AUTH_TYPE.AWS_IAM,
      credentials: () => Auth.currentCredentials(),
    });

希望这会有所帮助。