AWS Cognito - пользовательское тестирование доступа к папкам S3 - PullRequest
0 голосов
/ 07 февраля 2019

В настоящее время я работаю над приложением, в котором мне нужно предоставить доступ к папке для конкретного пользователя в папке 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);
    }
});

} Заранее благодарим за помощь.

Авинаш.

...