【发布时间】:2017-03-05 05:36:36
【问题描述】:
最新 sigv4 s3 浏览器上传帖子的文档 - http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html
- 表明我需要使用x-amz-signature、x-amz-credential 和policy。
如果我尝试这样做,我会收到一条错误消息,指出我缺少 AWSAccessKeyId,这在文档中没有提到,并且 x-amz-signature 需要是 signature。
要签名的字符串:
我应该执行上面的 base64 存储桶策略文档,还是应该执行规范方法,例如 python 发布到 dynamoDB - http://docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html#sig-v4-examples-post。
签名:
规范使用 hmac hexdigest hmac.new(signing_key, (string_to_sign).encode('utf-8'), hashlib.sha256).hexdigest()
上面的上传文档使用带有 base64 的 hmac:Base64.encode64(OpenSSL::HMAC.digest('sha256', signaturekey, @policy))。
在hood of the ruby sdk 下,看起来他们正在使用非hmac hexdigest:OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), key, value)。
上传到s3需要什么方法?
FWIW,我正在使用带有 Rails 作为 API 的 SPA,所以很遗憾我无法访问任何 Rails 视图助手。
我发布了一个关于我的代码 yesterday 的问题,不幸的是,我看到了一个使用 rails view helpers 的链接
编辑:
政策发送的内容:
{"expiration":"2017-03-06T20:13:51Z",
"conditions":[
{"bucket":"example-development"},
{"x-amz-credential":"AKIAIVVIZJHOBCBAB5CA/20170305/us-west-2/s3/aws4_request"},
{"x-amz-algorithm":"AWS4-HMAC-SHA256"},
{"x-amz-date":"20170305T000000Z"}
]
}
表单发送的内容:
Policy:"eyJleHBpcmF0aW9uIjoiMjAxNy0wMy0wNlQyMDoxOTowN1oiLCJjb25kaXRpb25zIjpbeyJidWNrZXQiOiJ3YXlkb3BlLWRldmVsb3BtZW50In0seyJ4LWFtei1jcmVkZW50aWFsIjoiQUtJQUlWVklaSkhPQkNCQUI1Q0EvMjAxNzAzMDUvdXMtd2VzdC0yL3MzL2F3czRfcmVxdWVzdCJ9LHsieC1hbXotYWxnb3JpdGhtIjoiQVdTNC1ITUFDLVNIQTI1NiJ9LHsieC1hbXotZGF0ZSI6IjIwMTcwMzA1VDAwMDAwMFoifV19"
X-Amz-Signature:"Cqjvo9aYCrb8PYHD+mUDjlOwKUzTpsI4d5/oycFAUBA="
key:"uploads/photo/photo/126/photo.jpg"
x-amz-algorithm:"AWS4-HMAC-SHA256"
x-amz-credential:"AKIAIVVIZJHOBCBAB5CA/20170305/us-west-2/s3/aws4_request"
x-amz-date:"20170305T000000Z"
存储桶策略和 CORS 包含零条件。
【问题讨论】:
-
您的表单和策略中需要
X-Amz-Algorithm,其值为AWS4-HMAC-SHA256。您没有提到这一点,如果它不存在,则可能会触发有关AWSAccessKeyId的消息(您通常不应该使用它)。你应该使用政策文件。 -
更新了正在发送的数据
标签: ruby-on-rails amazon-web-services amazon-s3