Я хочу создать один 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.