Javascript 签名与s3 GET对象不匹配

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

我在AmazonS3中有一个图像,其中包含经过身份验证的用户的ACL。我正在尝试使用GET方法检索该图像。javascript方法(在AngularJS中)如下所示 (在下面的示例中,响应包含必要的数据,如authHeader)

但我得到一个403例外,上面写着SignatureDesNotMatch。我做错什么了吗?我很确定我提供的值是正确的


提前谢谢

为什么你会发送带有
GET
请求的
x-amz-content-sha256
,我收到以下错误消息
UnsignedContentSHA256NotAllowed
提供的“x-amz-content-sha256”头必须是有效的sha256。
Ah,好的,因为您使用的是授权头而不是查询字符串身份验证。该值将是空字符串的sha256
e3b0…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();