AWS AppSync - Несанкционированное исключение

Я начал использовать AWS AppSync, и у меня возникла проблема с разрешениями.

Я использовал AppSync, чтобы создать таблицу DynamoDB для моих данных и настроить авторизацию для использования с пулами пользователей Cognito, которые я уже создал.

Я установил действие по умолчанию на ALLOW, что, согласно документам AWS - https://docs.aws.amazon.com/appsync/latest/devguide/security.html#amazon-cognito-user-pools-авторизация - должна разрешить общий доступ к запускать любые запросы / мутации / подписки, определенные в моей схеме по умолчанию.

В приведенной выше документации также говорится, что ограничение доступа осуществляется путем добавления @aws_auth к моим определениям типов. Кого я еще не добавил.

И вот чего я хочу: я хочу, чтобы мои запросы были общедоступными - не нужно добавлять директиву @aws_auth - и чтобы мои изменения были ограничены группой Admins в моем пуле пользователей Cognito. Таким образом, при тестировании запроса я должен иметь возможность получать данные, которые мне возвращают, не входя в систему где-либо.

Однако при попытке выполнить какие-либо тестовые запросы в консоли AppSync я получаю следующее сообщение об ошибке:

{
  "errors": [
    {
      "errorType": "UnauthorizedException",
      "message": "Unable to parse JWT token."
    }
  ]
}

Очевидно, это связано с тем, что вы не вошли в Cognito.

Раньше я тестировал эти запросы без использования авторизации Cognito, и все они работали нормально. А поскольку для моего авторизатора Cognito для моего действия по умолчанию установлено значение ALLOW, мои запросы теперь должны выполняться точно так же, поскольку я их не изменял.

Глядя на код моих запросов, типов и преобразователей, я не вижу никакой разницы в том, как они написаны. Роль IAM, разрешающая доступ к моей таблице DynamoDB, также остается прежней и не имеет никаких ограничений.

Что здесь происходит? Есть ли ошибка с AppSync, или мне что-то здесь не хватает?

Пожалуйста, дай мне знать. Спасибо


person Z_z_Z    schedule 06.10.2018    source источник
comment
Вы нашли решение этого?   -  person Aldarund    schedule 29.10.2018
comment
@Aldarund На данный момент кажется, что AppSync не поддерживает публичный доступ при использовании Cognito для аутентификации. Итак, я создал два проекта AppSync: один для публичного доступа с использованием ключа API, а другой для администраторов, использующих Cognito. Но можно разрешить сочетание публичного и частного доступа с помощью AWS IAM, но я пока не пробовал экспериментировать с этим.   -  person Z_z_Z    schedule 31.10.2018
comment
github.com/aws-amplify/amplify-js/issues/1252   -  person Aldarund    schedule 03.11.2018


Ответы (2)


Я думаю, что срок действия вашего ключа API истек. Итак, goto - APIs -> выберите свой AppSync -> перейти к настройке -> выберите ключи API -> затем Edit -> теперь вы находитесь в разделе «Настройте свой ключ API и измените срок действия. " -> Выбрать истекает. Выберите, когда истечет срок действия этого ключа API. Здесь вы можете выбрать срок в 1 год с даты создания новых ключей API.

person Harsh Bhatnagar    schedule 02.11.2018
comment
При установке типа авторизации на Amazon Cognito User Pool для ключа API по умолчанию установлено значение none. Ответ вводит в заблуждение. - person Cris69; 12.01.2019
comment
Неавторизованное исключение возникает либо срок действия ключа истек, либо в запросе, который используется в таблице DynamoDB, отсутствует какой-либо параметр. Ответ на этот вопрос не вводит в заблуждение. @ Cris69 - person Harsh Bhatnagar; 20.03.2019
comment
Спасибо. (перейдите в Appsync - ›API ...) - person bhizmi; 08.03.2021

Вы про в консоли "Запросы"? Даже если вы вошли в свою учетную запись AWS и перешли в консоль AWS AppSync Queries, вам все равно потребуется войти в систему отдельно в качестве пользователя когнитивного доступа. Нажмите кнопку «Войти с помощью пулов пользователей».

введите описание изображения здесь

Оттуда просто введите информацию о когнитивном пользователе, которого вы уже создали, и это будет имитировать вход в систему для целей тестирования. Вы можете найти свой clientId в файле aws-exports.js в своем проекте в строке: «aws_user_pools_web_client_id».

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

person DaveCode    schedule 12.12.2018