boto3 и Go aws SDK генерируют предварительно назначенный URL по-другому? - PullRequest
0 голосов
/ 07 июня 2018

Я сталкиваюсь с SignNotMatch, когда генерирую предопределенный URL с помощью boto3 с кодом ниже:

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 - нет.

Предполагается, или я использую его неправильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...