Los documentos para la última publicación de carga del navegador sigv4 s3 - http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html - muestran que necesito usar x-amz-signature , x-amz-credential y policy .
Si intento eso, aparece un error que dice que me falta AWSAccessKeyId , que no se menciona en los documentos, y que la x-amz-signature debe ser una signature .
¿Se supone que debo hacer el documento de política de depósito base64 anterior, o se supone que debo hacer el enfoque canónico, como la publicación de python en dynamoDB - http://docs.aws.amazon.com/general/latest/gr/ sigv4-signed-request-examples.html#sig-v4-examples-post .
el canonical usa hmac hexdigest hmac.new(signing_key, (string_to_sign).encode('utf-8'), hashlib.sha256).hexdigest()
El documento de carga anterior usa hmac con base64: Base64.encode64(OpenSSL::HMAC.digest('sha256', signaturekey, @policy)) .
Bajo el capó de ruby sdk , parece que están usando el hexdigest que no es hmac: OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), key, value) .
¿Qué método se necesita para subir a s3?
FWIW, estoy usando un SPA con Rails como API, por lo que lamentablemente no tengo acceso a ningún asistente de vista de Rails.
Ayer publiqué una pregunta sobre mi código y, lamentablemente, se me mostró un enlace que usa asistentes de vista de rieles.
Lo que la política está enviando:
{"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"} ] }Lo que el formulario está enviando:
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"La política de depósito y CORS contienen condiciones cero.
Con una carga del navegador s3, la cadena para firmar debe ser la configuración del depósito: http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-UsingHTTPPOST.html
Siga los enlaces en la parte inferior de la página.