Ruby 使用POST基于浏览器的上载
我正在尝试使用AWS签名版本4的POST创建客户端上传。 根据文件 当我在服务器端生成签名时,我得到的签名与中提到的AWS签名完全匹配 但是,当我使用它上载页面时,我会出现以下错误: SignatureDesNotMatch我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法 这是我使用的代码:Ruby 使用POST基于浏览器的上载,ruby,amazon-web-services,amazon-s3,Ruby,Amazon Web Services,Amazon S3,我正在尝试使用AWS签名版本4的POST创建客户端上传。 根据文件 当我在服务器端生成签名时,我得到的签名与中提到的AWS签名完全匹配 但是,当我使用它上载页面时,我会出现以下错误: SignatureDesNotMatch我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法 这是我使用的代码: OpenSSL::HMAC.hexdigest('sha256', signing_key(string_to_sign), string_to_sign) # step 2 in th
OpenSSL::HMAC.hexdigest('sha256', signing_key(string_to_sign), string_to_sign)
# step 2 in the aws documentation
def signing_key(encoded_policy)
# generate the correct date
date = extract_encoded_policy_date(encoded_policy)
date = time_adjust(date)
# encode all the fields by the algorithm
date_key = OpenSSL::HMAC.digest('sha256',"AWS4#{@secret_access_key}", date.strftime("%Y%m%d"))
date_region_key = OpenSSL::HMAC.digest('sha256',date_key, @region)
date_region_service_key = OpenSSL::HMAC.digest('sha256',date_region_key, @service)
signing_key = OpenSSL::HMAC.digest('sha256',date_region_service_key, 'aws4_request')
signing_key
end
def time_adjust(date)
time = Time.parse(date)
time += time.utc_offset
time.utc
end
在网上搜索了一下之后,我遇到了这个问题。Iv'e实现了这段代码,上传成功
signature = OpenSSL::HMAC.digest( OpenSSL::Digest::Digest.new('sha1'), @secret_access_key, string_to_sign)
Base64.encode64(signature).gsub("\n","")```
这是一个用于客户端的小代码
以下是一些我发现有用的文献:两者的区别是什么?
我如何获得第一个工作和上传文件的选项?
AWS页面中的示例是否不再有效?经过研究和比较,我发现表单中存在一些冗余字段,使AWS认为我在使用SHA1 从表单中删除AWSAccessKeyId字段并重命名其他一些字段后,我设法使AWS4正常工作 这是最新的
您似乎多次对数据进行签名。您只需编译字符串并对其签名一次即可。如图所示,AWS4授权需要一系列编码。第二个代码段是一个不同的尝试,而不是第一个。
<form id="myForm" action="http://yourbucket.s3.amazonaws.com/" method="post" enctype="multipart/form-data">
<input type="hidden" id="key" name="key" value="uploads/${filename}"/>
<input type="hidden" id="acl" name="acl" value="YOUR_ACL_OPTION"/>
<input type="hidden" name="success_action_redirect" value="http://google.com" />
<input type="hidden" id="type" name="Content-Type" value="MIME_TYPE"/>
<input type="hidden" name="x-amz-meta-uuid" value="14365123651274" />
<input type="hidden" name="X-Amz-Credential" value="YOUR_CREDENTIALS" />
<input type="hidden" name="X-Amz-Algorithm" value="AWS4-HMAC-SHA256" />
<input type="hidden" id="date" name="X-Amz-Date" value="" />
<input type="hidden" name="x-amz-meta-tag" value="" />
<input type="hidden" id="policy" name="Policy" value="YOUR_POLICY_DOCUMENT_BASE64_ENCODED"/>
<input type="hidden" id="signature" name="X-Amz-Signature" value="YOUR_CALCULATED_SIGNATURE"/>
<input name="file" id="file" type="file"/>
<input id="btn_submit" class="btn btn-warning" type="submit" value="Upload File to S3">
</form>