Я пытаюсь работать через S3 signing example. Но я не получаю промежуточные ответы в своих документах. Я начал в iex
с:S3 подписание команд браузера POST в Elixir
policy = %{"conditions"=> [
%{"bucket"=> "sigv4examplebucket"},
["starts-with", "$key", "user/user1/"],
%{"acl"=> "public-read"},
%{"success_action_redirect"=> "http=>//sigv4examplebucket.s3.amazonaws.com/successful_upload.html"},
["starts-with", "$Content-Type", "image/"],
%{"x-amz-meta-uuid"=> "14365123651274"},
%{"x-amz-server-side-encryption"=> "AES256"},
["starts-with", "$x-amz-meta-tag", ""],
%{"x-amz-credential"=> "AKIAIOSFODNN7EXAMPLE/20151229/us-east-1/s3/aws4_request"},
%{"x-amz-algorithm"=> "AWS4-HMAC-SHA256"},
%{"x-amz-date"=> "20151229T000000Z"}
]
}
stringToSign = policy |> Poison.encode! |> Base.encode64
Но stringToSign
выходит довольно короче, чем, например Amazon.
Для подписи у меня есть эти помощники:
@secret_key "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
def signing_key2(secret, date, region, service) do
hash_sha256("AWS4" <> secret, date)
|> hash_sha256(region)
|> hash_sha256(service)
|> hash_sha256("aws4_request")
end
def hash_sha256(secret, msg) do
hash_sha256_bis(secret, msg)
|> Base.url_encode64
end
def hash_sha256_bis(secret, msg) do
:crypto.hmac(:sha256, secret, msg)
end
и побежал
signing_key2(@secret_key, "20151229", "us-east-1", "s3")
, но это вышло короче, чем тест-ответ. Хотелось бы приветствовать некоторых указателей.
Привет, спасибо большое. У меня теперь строка одинаковой длины, но с капителями и там, где делаю ее в нижнем регистре, не будет достаточно. Будет ли переписываться с моим кодом, хотя –
Кажется, что это работает, но сейчас Я удивлен, когда, перечитав инструкции, он говорит о шестнадцатеричном кодировании окончательной подписи, и это не работает (результат слишком короткий) –