S3主机/查询字符串身份验证因额外参数而中断

时间:2013-07-06 06:32:33

标签: django amazon-s3

我有一个Django项目设置,S3作为静态文件主机。

settings.py

AWS_STORAGE_BUCKET_NAME = 'project-1'
conn = boto.connect_s3()
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
S3_URL = 'http://project-1.s3.amazonaws.com/'
STATIC_URL = S3_URL

然后我使用模板标签在我的模板中引用静态文件,如下所示:

<script src="{% static 'js/jquery.payment.js' %}"></script>

这在浏览器中正确呈现,但网址上有3个其他参数,SignatureExpiresAWSAccessKeyId。后两者对文件没有任何影响,但使用呈现的Signature值访问文件会导致InvalidAccessKeyId错误,并显示消息“您提供的AWS访问密钥ID在我们的记录中不存在”。

手动删除Signature参数可以让我正确访问该文件。拿走所有三个参数都很好。取消后两个参数中的任何一个都会导致错误:“查询字符串身份验证需要Signature,Expires和AWSAccessKeyId参数”。

Amazon's S3 documentation显示查询字符串身份验证用于允许您访问通常需要身份验证的文件,并且Expires参数不像我认为的那样与缓存相关。由于看起来这些文件不需要任何身份验证(即我可以在没有URL参数时访问它们),我需要帮助:

  1. 制作staticfiles / boto不强制我的网址上的这些参数
  2. 使staticfiles / boto获得有效的Signature

1 个答案:

答案 0 :(得分:9)

设置AWS_QUERYSTRING_AUTH = False