当我使用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>
它应该以错误的方式使用它吗?