angularjs - 仅允许一种身份验证机制;仅X-Amz-Algorithm查询参数。

标签 angularjs amazon-s3

我正在尝试将PUT请求发送到amazonS3预签名URL。即使我只有一个PUT请求,我的请求似乎也被调用了两次。第一个请求返回200 OK,第二个请求返回400 Bad Request

这是我的代码:

var req = {
    method: 'PUT',
    url: presignedUrl,
    headers: {
        'Content-Type': 'text/csv'
    },
    data: <some file in base64 format>
};

$http(req).success(function(result) {
    console.log('SUCCESS!');
}).error(function(error) {
    console.log('FAILED!', error);
});
400 Bad Request错误的详细信息:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
   <Code>InvalidArgument</Code>
   <Message>Only one auth mechanism allowed; only the X-Amz-Algorithm query parameter, Signature query string parameter or the Authorization header should be specified</Message>
   <ArgumentName>Authorization</ArgumentName>
   <ArgumentValue>Bearer someToken</ArgumentValue>
   <RequestId>someRequestId</RequestId>
   <HostId>someHostId</HostId>
</Error>

我不明白的是,为什么它返回400?解决方法是什么?

最佳答案

您的客户端可能正在发送一个使用Authorization header 的初始请求,并通过302响应。该响应包括一个具有Signature参数的Location header 。问题在于,来自初始请求的 header 被复制到后续的重定向请求中,因此它既包含授权又包含签名。如果您从随后的请求中删除“授权”,那就应该不错。

这发生在我身上,但是在Java / HttpClient环境中。我可以提供Java解决方案的详细信息,但不幸的是,无法提供AngularJS。

关于angularjs - 仅允许一种身份验证机制;仅X-Amz-Algorithm查询参数。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31514336/

相关文章:

ruby - 如何在 Ruby 中使用 S3 SSE C(使用客户端提供的 key 的服务器端加密)

amazon-web-services - 如何重播从 AWS Firehose 推送到 S3 的流数据?

python - 如何使用 python boto 为 amazon S3 中存在的文件生成下载链接?

angularjs - 是否有必要使用 MEAN、NG-boilerplate 等样板

javascript - Karma - 测试函数,不返回且不设置范围变量

javascript - 如何为非根基 url 设置 AngularJS $locationProvider HTML5 模式?

node.js - 套接字在node.js中挂起

javascript - AngularJS 自定义指令访问范围数据

session - 如何在多页面 Angular 应用程序中保持 session ?

amazon-web-services - 从 Amazon S3 存储桶中删除大量版本