Ошибка запроса AWS Amplify React GET - отсутствует токен аутентификации - PullRequest
0 голосов
/ 17 сентября 2018

Я использую AWS Amplify в своем приложении реакции для вызова моего API, размещенного в API Gateway с авторизацией AWS_IAM. Когда я устанавливаю авторизацию на NONE, все отлично работает в моем приложении реакции.

Однако, когда я устанавливаю авторизацию на AWS_IAM и запускаю свой API, используя API.get () из Amplify, как показано ниже:

const notes = await API.get('notes', '/notes', init);

Я получаю сообщение об ошибке вроде:

{ "message": "Missing Authentication Token", "err": "missing auth" }

Поэтому я попытался использовать aws-api-gateway-cli-test для проверки моего шлюза API. Благодаря сценарию я смог получить действительные учетные данные, получить аутентифицированный и правильный ответ. Я также попробовал POSTMAN с моими учетными данными администратора, и это также сработало.

Проведя некоторое исследование, я увидел, что люди связывают это с проблемой CORS. Я дважды проверил настройки своего шлюза API и подтвердил, что я включил CORS. Та же проблема сохраняется.

Благодаря функции отладки aws-ampify я смог увидеть процесс подписания в моем инспекторе Chrome. Процесс подписания был выполнен правильно с некоторыми accessKey и secretKey. Я вытащил эти ключи из инспектора в свой POSTMAN и попытался их получить. Эти учетные данные недействительны, и я получил следующее сообщение об ошибке:

{ "message": "The security token included in the request is invalid.", "err:": "default" }

Обновление: Я забыл скопировать токен сеанса в POSTMAN. Теперь со всеми учетными данными, сгенерированными моим приложением, я могу получить правильный результат из своего API в POSTMAN. Просто нет в моем приложении.

На данный момент для меня совершенно очевидно, что это проблема с аутентификацией. Тем не менее, я использовал aws-усиление для входа и получения процесса. Уверен, что процесс подписания осуществляется за кулисами.

Я потратил 3 дня на эту проблему и в основном все перепробовал ... Есть идеи, почему это не работает?

P.S. Многие люди предполагают, что опечатки в URL-адресе вызова могут привести к этой проблеме. Я дважды проверил, и нет опечатки. Ниже приведен мой расширенный код настройки:

``Amplify.configure({
  Auth: {
    mandatorySignIn: true,
    region: config.cognito.REGION,
    userPoolId: config.cognito.USER_POOL_ID,
    identityPoolId: config.cognito.IDENTITY_POOL_ID,
    userPoolWebClientId: config.cognito.APP_CLIENT_ID
  },
  Storage: {
    region: config.s3.REGION,
    bucket: config.s3.BUCKET,
    identityPoolId: config.cognito.IDENTITY_POOL_ID
  },
  API: {
    endpoints: [
      {
        name: "notes",
        endpoint: config.apiGateway.URL,
        region: config.apiGateway.REGION
      }
    ]
  }
});``

1 Ответ

0 голосов
/ 19 сентября 2018

Только что решил мою проблему - у меня были параметры авторизации для метода OPTIONS, чтобы он был AWS_IAM в разделе Ресурсы в API Gateway.Однако когда мой браузер отправляет запрос, он сначала отправляет запрос в OPTIONS, чтобы проверить наличие определенных заголовков без учетных данных в этом запросе.

Поскольку я установил OPTIONS с авторизацией IAM, метод OPTIONS затем проверил IAM по этому запросу без моих учетных данных.Вот почему я получил «Отсутствующий токен аутентификации».

...