Javascript 签名与s3 GET对象不匹配
我在AmazonS3中有一个图像,其中包含经过身份验证的用户的ACL。我正在尝试使用GET方法检索该图像。javascript方法(在AngularJS中)如下所示 (在下面的示例中,响应包含必要的数据,如authHeader) 但我得到一个403例外,上面写着SignatureDesNotMatch。我做错什么了吗?我很确定我提供的值是正确的Javascript 签名与s3 GET对象不匹配,javascript,amazon-web-services,amazon-s3,Javascript,Amazon Web Services,Amazon S3,我在AmazonS3中有一个图像,其中包含经过身份验证的用户的ACL。我正在尝试使用GET方法检索该图像。javascript方法(在AngularJS中)如下所示 (在下面的示例中,响应包含必要的数据,如authHeader) 但我得到一个403例外,上面写着SignatureDesNotMatch。我做错什么了吗?我很确定我提供的值是正确的 提前谢谢为什么你会发送带有GET请求的x-amz-content-sha256,我收到以下错误消息UnsignedContentSHA256NotAll
提前谢谢为什么你会发送带有
GET
请求的x-amz-content-sha256
,我收到以下错误消息UnsignedContentSHA256NotAllowed
提供的“x-amz-content-sha256”头必须是有效的sha256。
Ah,好的,因为您使用的是授权头而不是查询字符串身份验证。该值将是空字符串的sha256e3b0…b855
。有道理。
var uri = 'https://sample.s3.amazonaws.com/sample/image.jpg';
var postParams = response.data;
var xhr = new XMLHttpRequest();
xhr.addEventListener("load", downloadComplete, false);
xhr.addEventListener("error", downloadFailed, false);
xhr.addEventListener("abort", downloadCanceled, false);
function downloadComplete(e) {
var xhr = e.srcElement || e.target;
if(xhr.status === 200) { //success status
}
else {
}
}
function downloadFailed(e) {
debugger;
}
function downloadCanceled(e) {
debugger;
}
xhr.open('GET', uri, true);
xhr.setRequestHeader('Authorization', postParams.authHeader);
xhr.setRequestHeader('x-amz-content-sha256', postParams.payloadHash);
xhr.setRequestHeader('Host', "sample.s3.amazonaws.com");
xhr.setRequestHeader('x-amz-date', postParams.date);
xhr.send();