Я начинаю с Eucalyptus, с некоторой предысторией S3 и EC2. У меня есть приложение, для которого я использую личную библиотеку для взаимодействия с S3 и хранения / извлечения файлов оттуда. Теперь я хочу сделать свое приложение совместимым и с Walrus.
Это моя установка:
UEC сервера Ubuntu 10.04:
10.211.55.18:8773/services/Walrus
10.211.55.18:8443
веб-портал и изменил пароль администратораЯ смог без проблем взаимодействовать с Walrus через Cyberduck и Cloudberry, затем я создал корзину mybucket и объект myobject, но не могу сделать простой запрос с программной библиотекой HTTP, не используя curl с сгенерированной авторизацией.
Если я перейду в браузер и вставлю: http://10.211.55.18:8773/services/Walrus/mybucket/myfile
Я получаю красивое сообщение XML с ошибкой авторизации (как и ожидалось).
Но при попытке получить этот объект я выполнил следующий процесс подписи (псевдокод):
digest = new_openssl_sha1_digest
date = "Sat, 03 Mar 2012 18:13:54 GMT" (now UTC datetime)
description = "GET\n\n\nSat, 03 Mar 2012 18:13:54 GMT\n/mybucket/myfile"
signature = new_base_64_HMAC(digest, secret_key, description)
headers = {
Date: date,
Authorization: "AWS <access_key_id>:<signature>"
}
Итак, я получаю эти URL-адрес и заголовки запроса:
Дорожка: http://10.211.55.18:8773/services/Walrus/mybucket/myfile
Заголовки: {"date"=>"Sat, 03 Mar 2012 18:13:54 GMT", "Authorization"=>"AWS WKy3rMzOWPouVOxK1p3Ar1C2uRBwa2XXXXXX:U/fpoVUCbN64h8iRICp9JZzKWgE="}
Но когда я отправляю запрос GET, как указано выше, я получаю только крошечный ответ:
<headers>
Status: 400 Unauthorized
Content-Type: text/plain; charset=UTF-8
<body>
Failure: 400 Bad Request
Я не могу найти, что делаю не так, я слежу за подписью S3. Мне нужно это понимать, так как мне нужно реализовать плагин для Walrus для моего приложения, поэтому я не могу использовать сторонние инструменты.
Надеюсь, что кто-то может помочь, спасибо.
Что ж, я нашел, что происходит ... На самом деле, морж тоже включает в подпись путь / services / Walrus, я подписывал только / mybucket / myfile. Таким образом, можно решить эту проблему, подписав строку '/ services / Walrus / bucket / file', вот и все!