Несогласованная SignatureDoesNotMatch Amazon S3 с django-трубопроводом, s3boto и хранилищами

У меня есть 2 файла, скомпилированные django-конвейером вместе с s3boto: master.css и master.js. Они настроены на «Public» в моих ковшиках. Однако, когда я обращаюсь к ним, иногда используется master.css, иногда он ошибается с SignatureDoesNotMatch. То же самое с master.js. Этого не происходит в Chrome. Что я могу пропустить?

EDIT : теперь это происходит и в Chrome.

4 Solutions collect form web for “Несогласованная SignatureDoesNotMatch Amazon S3 с django-трубопроводом, s3boto и хранилищами”

Случилось со мной тоже … Ушло несколько часов, чтобы найти, но я все понял. Оказывается, если правильная подпись:

ssCNsAOxLf5vA80ldAI3M0CU2% 2BW =

Тогда AWS НЕ примет:

ssCNsAOxLf5vA80ldAI3M0CU2 + W =

Там, где единственной разницей является перевод% 2B в '+'.

S3BotoStorage фактически дает его правильно, но кодирование происходит на CachedFilesMixin в последней строке метода url ( return unquote(final_url) ). Чтобы исправить это, я получил новый CachedFilesMixin, чтобы отменить «ущерб» (я должен упомянуть, что я не знаю, почему этот недокумент существует в первую очередь, поэтому отмена его может вызвать другие проблемы)

 class MyCachedFilesMixin(CachedFilesMixin): def url(self, *a, **kw): s = super(MyCachedFilesMixin, self).url(*a, **kw) if isinstance(s, unicode): s = s.encode('utf-8', 'ignore') scheme, netloc, path, qs, anchor = urlparse.urlsplit(s) path = urllib.quote(path, '/%') qs = urllib.quote_plus(qs, ':&=') return urlparse.urlunsplit((scheme, netloc, path, qs, anchor)) 

Где я использовал код, который я нашел здесь .

Надеюсь это поможет…

У меня была аналогичная проблема, вызывающая ошибки SignatureDoesNotMatch при загрузке файлов с использованием S3-подписанного URL-адреса и запросов на HTTP-протокол python.

Моя проблема оказалась плохой контент-тип. Документация на AWS по аутентификации запросов REST помогла мне разобраться в этом, и есть примеры в Python.

Некоторое время я боролся с этим, и мне не нравилась идея испортить работу с CachedFilesMixin (показалось мне излишним).

До тех пор, пока на платформе django не будет исправлено правильное исправление, я нашел ссылку на подпись два раза – это хороший вариант. Я знаю, что это некрасиво, но это работает, и все просто.

Поэтому вам просто нужно сделать что-то вроде этого:

 signature = urllib.quote_plus(signature.strip()) signature = urllib.quote_plus(signature.strip()) 

Надеюсь, поможет!

Эта статья о Flask – хороший ресурс для правильной подписи ваших подписей: https://devcenter.heroku.com/articles/s3-upload-python

 @app.route('/sign_s3/') def sign_s3(): AWS_ACCESS_KEY = os.environ.get('AWS_ACCESS_KEY_ID') AWS_SECRET_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY') S3_BUCKET = os.environ.get('S3_BUCKET') object_name = request.args.get('s3_object_name') mime_type = request.args.get('s3_object_type') expires = int(time.time()+10) amz_headers = "x-amz-acl:public-read" put_request = "PUT\n\n%s\n%d\n%s\n/%s/%s" % (mime_type, expires, amz_headers, S3_BUCKET, object_name) signature = base64.encodestring(hmac.new(AWS_SECRET_KEY,put_request, sha).digest()) signature = urllib.quote_plus(signature.strip()) url = 'https://%s.s3.amazonaws.com/%s' % (S3_BUCKET, object_name) return json.dumps({ 'signed_request': '%s?AWSAccessKeyId=%s&Expires=%d&Signature=%s' % (url, AWS_ACCESS_KEY, expires, signature), 'url': url }) 
 
Interesting Posts for Van-Lav

Преобразование строки Python в кортеж без разделения символов

socket.error: Разрешение отклонено при создании поддельного почтового сервера

Django создает CSV-файл, который содержит Unicode и может быть открыт непосредственно с помощью Excel

Расчет собственных значений Python выполняется намного медленнее, чем вычисления MATLAB на моем компьютере. Зачем?

Как я могу переопределить константу в импортированном модуле Python?

Построение панды timedelta

Django: как предварительно заполнить форму при использовании немодельных данных?

Когда Django поддерживает Python 3.x?

Python: конвертировать тайм-код UTC в метку времени UTC

Django DRF – Как сделать проверку CSRF с аутентификацией токена

Почему изображение хранится не так, как показано?

открыть открытый TCP-порт в Python

Регистрация в Django под UWSGI

Определите, находится ли каталог под контролем git

Tkinter, выполняющий функции с течением времени

Python - лучший язык программирования в мире.