Назад | Перейти на главную страницу

Проблемы с подключением эвкалиптового моржа

Я начинаю с Eucalyptus, с некоторой предысторией S3 и EC2. У меня есть приложение, для которого я использую личную библиотеку для взаимодействия с S3 и хранения / извлечения файлов оттуда. Теперь я хочу сделать свое приложение совместимым и с Walrus.

Это моя установка:

UEC сервера Ubuntu 10.04:

Я смог без проблем взаимодействовать с 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', вот и все!