我已经编写了一个小代码来从AWS s3获取所有文件,但我认为我缺少某些东西所以我得到了
错误:403禁止。
在下面的代码中,我是我帐户的生成签名,也是创建时间。
如果有人有任何其他代码示例请分享。我阅读了AWS-s3文档,但我没有得到一些要点
<!DOCTYPE html>
<html>
<head>
<title>fbjhbvaiu</title>
<script src="./dist/forge.min.js"></script>
</head>
<body>
<script type="text/javascript">
var aws_access_key = 'aws_access_key';
var aws_secret_key = 'aws_secret_key';
var bucket = 'bucket_namr';
var region = 'us-east-1';
var keyPrefix = '';
var contentType = 'application/x-www-form-urlencoded';
var successRedirect = 'www.google.com';
var kmsKeyArn = 'arn:aws:s3:::parse-html-code';
/*MY script........*/
var currentdate = new Date();
var currentDate1 = currentdate.getFullYear()+""
+ (currentdate.getMonth()+1)+""
+currentdate.getDate()+""+"T"
+ (currentdate.getHours()+1)+""
+ currentdate.getMinutes()+""
+ currentdate.getSeconds()+"Z";
var parsedDateTime1 = currentdate.getFullYear()+""
+(currentdate.getMonth()+1)+""
+currentdate.getDate();
var expiration1 = currentdate.getFullYear()+"-"
+ (currentdate.getMonth()+1)+"-"
+currentdate.getDate()+""+"T"
+ (currentdate.getHours()+1)+":"
+ currentdate.getMinutes()+":"
+ currentdate.getSeconds()+"Z";
var GMT = currentdate.getFullYear()+""
+ (currentdate.getMonth()+1)+""
+currentdate.getDate()+""+"T"
+(currentdate.getHours()-5)+""
+(currentdate.getMinutes()-30)+""
+currentdate.getSeconds()+"Z";
function convertJsonToString(policy) {
var encodedPolicy = forge.util.encode64(JSON.stringify(policy));
return encodedPolicy;
};
function sign(key, msg) {
var hmac = forge.hmac.create();
hmac.start("sha256", key);
hmac.update(msg);
var digest = hmac.digest();
return digest;
};
// Create string for X-Amz-Credential value
var credential = aws_access_key+ "/" + parsedDateTime1 + "/" + region + "/s3/aws4_request";
/* POLICY */
var json = { "expiration": expiration1,
"conditions": [
{"bucket": bucket},
["starts-with", "$key", keyPrefix],
{"acl": "public-read"},
{"success_action_redirect": successRedirect},
["starts-with", "$Content-Type", contentType],
{"x-amz-credential": credential},
{"x-amz-algorithm": "AWS4-HMAC-SHA256"},
{"x-amz-date": currentDate1},
{"x-amz-server-side-encryption": "aws:kms"},
{"x-amz-server-side-encryption-aws-kms-key-id": kmsKeyArn}
]
};
// Convert POLICY from JSON to String and Base64 encode it.
var stringToSign = convertJsonToString(json);
console.log('String To Sign: ' + stringToSign); // DEBUG
/* GENERATE THE SIGNATURE */
// Hash 1 - Key: AWS4ACCESSKEYID, Message: date
console.log('Generate dateKey...'); // DEBUG
var dateKey = sign("AWS4" + aws_secret_key, parsedDateTime1);
// Hash 2 - Key: dateKey, Message: region
console.log('Generate dateRegionKey...'); // DEBUG
var dateRegionKey = sign(dateKey, region);
// Hash 3 - Key: dateRegionKey, Message: "s3"
console.log('Generate dateRegionServiceKey...'); // DEBUG
var dateRegionServiceKey = sign(dateRegionKey, "s3");
// Hash 4 - Key: dateRegionServiceKey, Message: "aws4_request"
console.log('Generate signingKey...'); // DEBUG
var signingKey = sign(dateRegionServiceKey, "aws4_request");
// Hash 5 - Key: signingKey, Message: stringToSign
console.log('Generating signature...'); // DEBUG
var hmac = forge.hmac.create();
hmac.start("sha256", signingKey);
hmac.update(stringToSign);
var signature = hmac.digest().toHex();
console.log('Signature: ' + signature); // DEBUG
</script>
<script type="text/javascript">
var data = null;
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === 4) {
console.log(this.responseText);
}
});
xhr.open("GET", "https://s3.amazonaws.com/parse-html-code");
xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
xhr.setRequestHeader("host", "parse-html-code.s3.amazonaws.com");
xhr.setRequestHeader("x-amz-content-sha256", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");
xhr.setRequestHeader("x-amz-date", GMT);
xhr.setRequestHeader("authorization", "AWS4-HMAC-SHA256 Credential=AKIAJIIA5X7UFLLZ3RUA/"+parsedDateTime1+"/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature="+signature);
xhr.send(data);
console.log(xhr.responseText)
</script>
<h1>.................inspect it................</h1>
<p id="parsedDateTime1">
<script>
document.getElementById("parsedDateTime1").innerHTML = parsedDateTime1+"'''''''''''''parsedDateTime1'''''''''''''''''''";
</script>
</p>
<p id="expiration1">
<script>
document.getElementById("expiration1").innerHTML = expiration1+"'''''''''''''expiration1'''''''''''''''''''";
</script>
</p>
<p id= "currentDate1">
<script type="text/javascript">
document.getElementById("currentDate1").innerHTML = currentDate1+"............My date nd time";
</script>
</p>
<p id= "GMT">
<script type="text/javascript">
document.getElementById("GMT").innerHTML = GMT+"............GMT";
</script>
</p>
<p id= "hmac">
<script type="text/javascript">
function sign(key, msg) {
var hmac = forge.hmac.create();
hmac.start("sha256", key);
hmac.update(msg);
var digest = hmac.digest();
document.getElementById("hmac").innerHTML = "";
return digest ;
};
</script>
</p>
</body>
</html>