Как сделать запрос GraphQL общедоступным в API-интерфейсе синхронизации приложений AWS? - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь сделать GraphQL-запрос общедоступным.В настоящее время я использую Cognito User Pool для аутентификации, но теперь только зарегистрированные пользователи имеют доступ к запросам и мутациям.

Я знаю о @auth -директиве для объектов GraphQL,который, вероятно, может решить эту проблему.Но я не смог найти какую-либо документацию или руководство по его использованию.

Ответы [ 2 ]

2 голосов
/ 09 апреля 2019

Для API AppSync - ключи API считаются «не прошедшими проверку подлинности»

См. Приведенную ниже документацию: https://docs.aws.amazon.com/appsync/latest/devguide/security.html#api-key-authorization

0 голосов
/ 11 апреля 2019

Я только что решил эту проблему точно так же. Вот что я сделал:

  1. Обновите свой API, запустив amplify update auth и выберите IAM в качестве обработчика пользователя (все остальное идет по умолчанию)

  2. Войдите в консоль AWS -> Appsync и измените доступ к IAM (вместо Cognito Pool)

  3. Перейдите в консоль IAM и создайте политики IAM для пользователей AUTH и UNAUTH (найдите их в списке, введя имя приложения Appsync)

Найдите пользователя AUTH и прикрепите следующую политику (обновите ее, указав свои данные):

AUTH USER

{
    "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 Pools в 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(),
    });

Надеюсь, это поможет.

...