gpt4 book ai didi

ruby - 随机 "SignatureDoesNotMatch"禁止请求,即使通过 POST 将相同文件上传到 Amazon S3

转载 作者:太空宇宙 更新时间:2023-11-03 16:51:08 26 4
gpt4 key购买 nike

我多次上传同一个文件“File.txt”。有时它会成功上传到 S3,有时会引发:

SignatureDoesNotMatchThe request signature we calculated does not match the signature you provided. Check your key and signing method

不知道要测试什么才能发现问题。真的如异常所说的策略+签名问题吗?那么为什么有时我可以上传呢?

在升级到 Rails 4 并更新一些库之前,相同的配置始终有效。但是这种情况下的更新甚至不会影响简单的 POST 表单...

上传失败时发送的 POST 参数请求是:

key: attachments/ad6d5c8c-f9ae-48ab-a9ff-c1b199a91d1d/File.txt

acl: public-read

policy: XXX==

signature: YYY=

Content-Type: binary/octet-stream

AWSAccessKeyId: -- Hidden --

...还有一个成功的:

key: attachments/368f5497-6e11-4f07-b379-80020e902013/File.txt

acl: public-read

policy: XXX==

signature: ZZZ=

Content-Type: binary/octet-stream

AWSAccessKeyId: -- Hidden --

好像和以前一样。由于路径中的随机 guid 生成,唯一改变的属性是签名...

以下是生成策略的一些其他方法:

def fields
{
key: key,
acl: acl,
policy: policy,
signature: signature,
"Content-Type" => content_type || "binary/octet-stream",
"AWSAccessKeyId" => S3_CONFIG["access_key_id"]
}
end

def policy
Base64.encode64(policy_data.to_json).gsub("\n", "")
end

def policy_data
{
expiration: expiration,
conditions: [
{bucket: S3_CONFIG["bucket"]},
["starts-with", "$key", store_dir],
{acl: acl},
["starts-with", "$Content-Type", ''],
["content-length-range", min_file_size, max_file_size]
]
}
end

def signature
Base64.encode64(
OpenSSL::HMAC.digest(
OpenSSL::Digest::Digest.new('sha1'),
S3_CONFIG["secret_access_key"], policy
)
).gsub("\n", "")
end

我感谢任何帮助谢谢

最佳答案

让我试着总结一下。这只是解决方案的草稿,因为我这里没有环境来测试它。

• 根据this ,应该使用 url encode 对签名进行编码:

require 'open-uri'
signature = URI::encode(signature)

• Gsubbing "\n" 策略/签名看起来有点可疑。我会尝试根本不碰它,或者使用 .gsub("\n|\r")

在所有操作系统环境中删除所有可能的 LF/CR

我会开始尝试使用编码的非 gsubbed 策略/签名,然后继续使用 gsubbed 版本。

希望对您有所帮助。

关于ruby - 随机 "SignatureDoesNotMatch"禁止请求,即使通过 POST 将相同文件上传到 Amazon S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21395894/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com