boto3和Go aws SDK以不同的方式生成预签名URL?

时间:2018-06-07 03:08:16

标签: amazon-web-services go boto3 pre-signed-url

当我使用boto3生成带有下面代码的预签名网址时遇到SignNotMatch

session = Session(access_key, secret_key)

s3 = session.client('s3', endpoint_url=OSS_ENDPOINT, config=Config(signature_version='s3v4'))
url = s3.generate_presigned_url(
        ClientMethod='get_object',
        Params={
            'Bucket': bucket,
            'Key': key
            }
        )

然后解析请求并在我们的代理中辞职(使用AWS Go SDK signer.Presign),我总是得到一个不匹配的错误。

然后我在boto3中打开调试模式并在AWS Go SDK中添加日志,发现当他们计算Canonical Request时,他们使用不同的方式:

Canonical Request:

HTTP Verb + '\n' +
Canonical URI + '\n' +
Canonical Query String + '\n' +
Signed Headers + '\n' +
"UNSIGNED-PAYLOAD" 

在Go AWS SDK中,默认情况下会将X-Amz-Content-Sha256=UNSIGNED-PAYLOAD放入Canonical Query String,而boto3则不会。{/ p>

它应该以错误的方式使用它吗?

0 个答案:

没有答案