В настоящее время я работаю над приложением, в котором мне нужно предоставить доступ к папке для конкретного пользователя в папке S3 зарегистрированным пользователям AWS Cognito.
Чтобы начать с самого простого подхода, в настоящее время я пытаюсь получить доступ к корзине S3 через код JavaScript.Я сталкиваюсь с исключением, связанным с CORS при доступе к корзине S3 через код JavaScript.Исключением, которое я получаю, является
Access to XMLHttpRequest at 'https://s3.amazonaws.com/' from origin 'http://10.1.2.3' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
Проверка подлинности работает успешно, однако возникает проблема при доступе s3.
Политика доступа S3
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowGroupToSeeBucketListInTheConsole",
"Action": [
"s3:*"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::*"
]
}
]
}
Необходимый код JavaScript, который я здесь использую, приведен ниже
function signInButton() {
var bucketName = 'http://s3.amazonaws.com/my-s3-bucket';
var IdentityPoolId = 'us-east-1:705a3b3c-6d6e-4abc-8de9-4275fghi8798b';
var authenticationData = {
Username : document.getElementById("inputUsername").value,
Password : document.getElementById("inputPassword").value,
};
var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authenticationData);
var poolData = {
UserPoolId : _config.cognito.userPoolId,
ClientId : _config.cognito.clientId,
};
var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
var userData = {
Username : document.getElementById("inputUsername").value,
Pool : userPool,
};
var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);
var authToken = null;
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: function (result) {
var accessToken = result.getAccessToken().getJwtToken();
document.getElementById("loginsuccess").innerHTML = "Login successful";
},
onFailure: function(err) {
alert(err.message || JSON.stringify(err));
},
});
var cognitoUser = userPool.getCurrentUser();
if (cognitoUser != null) {
cognitoUser.getSession(function(err, result) {
if (result) {
console.log('You are now logged in.', result.getAccessToken().getJwtToken());
// Add the User's Id Token to the Cognito credentials login map.
AWS.config.update({
region: _config.cognito.region,
credentials: new AWS.CognitoIdentityCredentials({
IdentityPoolId: IdentityPoolId,
Logins: {
'cognito-idp.us-east-1.amazonaws.com/us-east-1_wDPj8XHj2': result.getIdToken().getJwtToken()
}
})
});
} else {
console.log('Error while authentication');
}
});
}
var s3 = new AWS.S3({
apiVersion: '2006-03-01',
params: {Bucket: bucketName}
});
s3.listBuckets(function(err, data) {
if(err) {
console.log("Error", err);
} else {
console.log("Success", data.Buckets);
}
});
} Заранее благодарим за помощь.
Авинаш.