有人能帮我弄清楚发生了什么吗?
我正在尝试加载测试一个用户可以上传和下载文件的应用程序。
旅程:
步骤1:当用户从磁盘选择文件(POST请求)时,它会创建一个文件ID和带有uuid的路径。
响应如下:{id:FILE-VX-1234,path:uuid/filename.jpg,uri:[s3://{place}/{uuid}/{filename}?endpoint=s3.dualstack.eu-west-1.amazonaws.com],状态:OPEN,大小:-1,时间戳:2020-02-13T10:59:43.146 0000,刷新标志:1,存储:STORAGEID,元数据:{}
第2步:使用这些(POST请求),它用s3 uri响应,并带有评估码ID、秘书访问码和会话令牌。
响应如下:{uri:[s3://{存贮位置}/{uuid}/{文件名}?endpoint=s3.dualstack.eu-west-1.amazonaws.com
步骤3:使用这些参数和添加的临时参数(日期),PUT请求将文件上传到s3存储桶中。
标题看起来像:
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8
Authorization: AWS4-HMAC-SHA256 Credential=${accesskeyID}/${currentDate}/{region}/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-security-token;x-amz-user-agent, Signature=${secretaccesskey}
Connection: keep-alive
Content-Length: 145541
Content-Type: image/jpeg
Host: <the host address>
Origin: https://{url}
Referer: https://{url}/upload/
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36
X-Amz-Content-Sha256: UNSIGNED-PAYLOAD
X-Amz-Date:${currentDateInUTC}
x-amz-security-token: ${sessionToken}
X-Amz-User-Agent: aws-sdk-js/2.409.0 callback
错误:
我已经验证了在PUT请求中传递的签名(秘密访问密钥)、访问密钥ID和会话令牌是正确的。
注:授权错误中的附加参数日期和“{region}/s3/aws4_请求,SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-security-token;x-amz-user-agent”是硬编码的。
如果不了解如何为请求生成签名(即授权
标题),就不可能提供任何帮助
根据签名和验证REST请求文章
AmazonS3RESTAPI使用基于密钥HMAC(哈希消息身份验证代码)的自定义HTTP方案进行身份验证。要对请求进行身份验证,首先要连接请求的选定元素以形成字符串。然后使用AWS秘密访问密钥计算该字符串的HMAC。非正式地说,我们将此过程称为“对请求进行签名”,并将HMAC算法的输出称为签名,因为它模拟了真实签名的安全属性。最后,使用本节中描述的语法将此签名添加为请求的参数。
下面是一段伪代码,演示如何生成标头:
Authorization = "AWS" + " " + AWSAccessKeyId + ":" + Signature;
Signature = Base64( HMAC-SHA1( YourSecretAccessKey, UTF-8-Encoding-Of( StringToSign ) ) );
StringToSign = HTTP-Verb + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
CanonicalizedAmzHeaders +
CanonicalizedResource;
CanonicalizedResource = [ "/" + Bucket ] +
<HTTP-Request-URI, from the protocol name up to the query string> +
[ subresource, if present. For example "?acl", "?location", "?logging", or "?torrent"];
CanonicalizedAmzHeaders = <described below>
您可以在JMeterforAPI测试文章(例如实现)中检查如何处理动态AWS SigV4。
尝试将文件上载到S3 Bucket,我使用以下代码设置SDK: 错误日志 可能的错误: URL应基于以下表单:文档
我正在开发一个特性,使用Angular/预签名url和API Gateway/lambda生成预签名url将文件上传到S3。 我的工作流描述如下: 从模板中获取选定文件 请求我的api(网关/lambda)使用文件名生成预签名的URL。 const body={filename:this.selectedfile.name}const preSignedUrl=await this.http.po
我正在尝试使用预先签名的URL将文件上传到Amazon的S3。我从生成URL的服务器获取URL https://com-example-mysite.s3-us-east-1.amazonaws.com/userFolder/ImageName?X-Amz安全令牌=xxfoox///xxbarxx= 不幸的是,当我将其传递给Refught2时,它会修改试图将其转换为URL的字符串。我设置了,它解决
我试图使用angular客户端将文件上传到Amazon S3。我已经使用NodeJs应用服务器生成了一个预先签名的URL。在将文件上传到预先签名的URL时,我收到一个错误,如下所示: "对预检请求的响应没有通过权限改造检查:请求的资源上没有'Access-Control-Allow-Origin'标头。因此不允许访问Origin'http://localhost:4200'。" 我已将以下 COR
这里是我的node.js预签名URL的生成 那么我在URL生成或卷曲方面的问题在哪里呢?谢谢
标题说明一切。这是我的代码; 我使用节点强大的文件。 成功上传后,url变量返回s3 url,类似以下内容; 下面是我的参数 我错过了什么?