AWS Amplify Gateway REST - React (хорошо) против React Native (403) - PullRequest
0 голосов
/ 25 февраля 2019

Я хочу создать один API с помощью AWS Amplify, чтобы я мог запрашивать / публиковать в React и React Native.Я настроил API и Lambdas через безсерверный сервер и пул пользователей вручную через консоль Cognito с двумя отдельными приложениями-клиентами для каждой платформы.Настройка React прошла гладко, все операции get / posts / put в API работают, как и ожидалось.

React-Native оказался немного более проблематичным.Я вручную настроил Amplify с теми же значениями, что и в проекте React, за исключением APP_CLIENT_ID, чтобы он соответствовал клиенту приложения в пуле пользователей в Cognito.

Все вызовы Auth (SignIn, SignUp) работают нормально,так что конфиг хотя бы частично в порядке.Но те же самые вызовы API REST, которые отлично работают в React, отвечают на 403 в Native, Missing Authentication Token.(Тот же пользователь).Я просмотрел документацию и увидел, что мне может понадобиться использовать custom_header в моей конфигурации Native:

Amplify.configure({
  API: {
    endpoints: [
      {
        name: 'testapi',
        endpoint: config.apiGateway.URL,
        region: config.apiGateway.REGION,
        custom_header: async () => {
          return {
            Authorization: (await Auth.currentSession()).idToken.jwtToken
          };
        }
      }
    ]
  }
});

Это устраняет ошибку Missing Authentication Token, но теперь я получаю: Authorization header requires 'Credential' parameter. Authorization header requires 'Signature' parameter. Authorization header requires 'SignedHeaders' parameter. Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header.

Я сравнил полные запросы через консоль Chrome, и похоже, что заголовок авторизации в React правильно сгенерирован с помощью Amplify, с Credential, Signature, SignedHeader и т. Д. В Native это выглядит очень по-разному, так как изменение custom_headerвыше просто устанавливает заголовок авторизации на jwtToken.

...