После настройки appsync с пулом Cognito , подключение к нему с помощью aws amplify react.js library
с локального хоста работает нормально, но после загрузки его в корзину s3, я просто получаю 401 ошибку:
x-amzn-errortype: UnauthorizedException
x-amzn-requestid: eb7e23c8-e02f-4906-831c-2528accc46ae
x-cache: Error from cloudfront
Я проверил вкладку сети Chrome. в заголовке запроса был токен jwt.
Странно то, что когда я пробовал другие хостинги, они тоже отлично работают. так что, похоже, проблема в конфигурации S3. Кто-нибудь знает, что может вызвать эту проблему?
Мои права доступа к s3 bucket:
{
"Version": "2012-10-17",
"Id": "HostingPolicy",
"Statement": [
{
"Sid": "PublicAccess",
"Effect": "Allow",
"Principal": "*",
"Action": "*",
"Resource": "arn:aws:s3:::test-hosting/*"
}
]
}
Конфигурация S3 Cors:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<ID>test-users-bucket-cors-rule</ID>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<ExposeHeader>x-amz-meta-custom-header</ExposeHeader>
<ExposeHeader>ETag</ExposeHeader>
<ExposeHeader>authorization</ExposeHeader>
<ExposeHeader>Authorization</ExposeHeader>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Упрощенный react.js
код:
const awsmobile ={
"aws_appsync_region": "...",
"aws_appsync_graphqlEndpoint": "https://....appsync-api.ap-southeast-2.amazonaws.com/graphql",
"aws_appsync_authenticationType": "AMAZON_COGNITO_USER_POOLS",
Auth: {
identityPoolId: "...",
region: "...",
userPoolId: "...",
userPoolWebClientId: "...",
}
};
Amplify.configure(awsconfig);
//works fine in localhost but not on s3 bucket !
const users = await API.graphql(graphqlOperation(listUsers));
console.log(JSON.stringify(users.data))