Ya no tienes que indagar más por internet ya que has llegado al sitio correcto, tenemos la respuesta que buscas pero sin problema.
Solución:
La diferencia es clara si simplemente invierte la codificación base64 en ambos resultados.
(atob()
decodifica base64, btoa()
lo codifica)
El ejemplo de Amazon:
atob('eyAiZXhwaXJhdGlvbiI6ICIyMDEzLTA4LTA3VDEyOjAwOjAwLjAwMFoiLA0KICAiY29uZGl0aW9ucyI6IFsNCiAgICB7ImJ1Y2tldCI6ICJleGFtcGxlYnVja2V0In0sDQogICAgWyJzdGFydHMtd2l0aCIsICIka2V5IiwgInVzZXIvdXNlcjEvIl0sDQogICAgeyJhY2wiOiAicHVibGljLXJlYWQifSwNCiAgICB7InN1Y2Nlc3NfYWN0aW9uX3JlZGlyZWN0IjogImh0dHA6Ly9leGFtcGxlYnVja2V0LnMzLmFtYXpvbmF3cy5jb20vc3VjY2Vzc2Z1bF91cGxvYWQuaHRtbCJ9LA0KICAgIFsic3RhcnRzLXdpdGgiLCAiJENvbnRlbnQtVHlwZSIsICJpbWFnZS8iXSwNCiAgICB7IngtYW16LW1ldGEtdXVpZCI6ICIxNDM2NTEyMzY1MTI3NCJ9LA0KICAgIFsic3RhcnRzLXdpdGgiLCAiJHgtYW16LW1ldGEtdGFnIiwgIiJdLA0KDQogICAgeyJ4LWFtei1jcmVkZW50aWFsIjogIkFLSUFJT1NGT0ROTjdFWEFNUExFLzIwMTMwODA2L3VzLWVhc3QtMS9zMy9hd3M0X3JlcXVlc3QifSwNCiAgICB7IngtYW16LWFsZ29yaXRobSI6ICJBV1M0LUhNQUMtU0hBMjU2In0sDQogICAgeyJ4LWFtei1kYXRlIjogIjIwMTMwODA2VDAwMDAwMFoiIH0NCiAgXQ0KfQ==')
" "expiration": "2013-08-07T12:00:00.000Z",
"conditions": [
"bucket": "examplebucket",
["starts-with", "$key", "user/user1/"],
"acl": "public-read",
"success_action_redirect": "http://examplebucket.s3.amazonaws.com/successful_upload.html",
["starts-with", "$Content-Type", "image/"],
"x-amz-meta-uuid": "14365123651274",
["starts-with", "$x-amz-meta-tag", ""],
"x-amz-credential": "AKIAIOSFODNN7EXAMPLE/20130806/us-east-1/s3/aws4_request",
"x-amz-algorithm": "AWS4-HMAC-SHA256",
"x-amz-date": "20130806T000000Z"
]
"
Tu resultado:
atob('eyJleHBpcmF0aW9uIjoiMjAxMy0wOC0wNlQxMjowMDowMC4wMDBaIiwiY29uZGl0aW9ucyI6W3siYnVja2V0IjoiZXhhbXBsZWJ1Y2tldCJ9LFsic3RhcnRzLXdpdGgiLCIka2V5IiwidXNlci91c2VyMS8iXSx7ImFjbCI6InB1YmxpYy1yZWFkIn0seyJzdWNjZXNzX2FjdGlvbl9yZWRpcmVjdCI6Imh0dHA6Ly9hY2w2LnMzLmFtYXpvbmF3cy5jb20vc3VjY2Vzc2Z1bF91cGxvYWQuaHRtbCJ9LFsic3RhcnRzLXdpdGgiLCIkQ29udGVudC1UeXBlIiwiaW1hZ2UvIl0seyJ4LWFtei1tZXRhLXV1aWQiOiIxNDM2NTEyMzY1MTI3NCJ9LFsic3RhcnRzLXdpdGgiLCIkeC1hbXotbWV0YS10YWciLCIiXSx7IngtYW16LWNyZWRlbnRpYWwiOiJBS0lBSU9TRk9ETk43RVhBTVBMRS8yMDEzMDgwNi91cy1lYXN0LTEvczMvYXdzNF9yZXF1ZXN0In0seyJ4LWFtei1hbGdvcml0aG0iOiJBV1M0LUhNQUMtU0hBMjU2In0seyJ4LWFtei1kYXRlIjoiMjAxMzA4MDZUMDAwMDAwWiJ9XX0=')
""expiration":"2013-08-06T12:00:00.000Z","conditions":["bucket":"examplebucket",["starts-with","$key","user/user1/"],"acl":"public-read","success_action_redirect":"http://acl6.s3.amazonaws.com/successful_upload.html",["starts-with","$Content-Type","image/"],"x-amz-meta-uuid":"14365123651274",["starts-with","$x-amz-meta-tag",""],"x-amz-credential":"AKIAIOSFODNN7EXAMPLE/20130806/us-east-1/s3/aws4_request","x-amz-algorithm":"AWS4-HMAC-SHA256","x-amz-date":"20130806T000000Z"]"
Por lo que puedo decir, es porque JSON.stringify elimina los espacios en blanco mientras que el método de Amazon los conserva. Si quisiera, podría usar JSON.stringify con algunas opciones adicionales para “imprimir bastante” la salida. Pero lo más probable es que no importe en absoluto, siempre que el codificado en base64 string decodifica a JSON válido, dudo que a S3 le importe si tiene espacios en blanco o no. No me preocuparía el hecho de que no puedes replicar el ejemplo de Amazon exactamente.
Aquí puedes ver las comentarios y valoraciones de los usuarios
Al final de la artículo puedes encontrar las referencias de otros administradores, tú todavía puedes insertar el tuyo si te gusta.