Проблемы с эвкалиптовым моржом
Я начинаю с эвкалипта, с некоторым фоном S3 и EC2. У меня есть приложение, для которого я использую личную библиотеку для взаимодействия с S3 и хранения / извлечения файлов оттуда. Теперь я хочу сделать свое приложение совместимым с Walrus.
Это моя установка:
Ubuntu 10.04 сервер UEC:
- Просто установил его на новую виртуальную машину, выбрав все компоненты, кроме NC, так как мне нужен только Walrus
- После загрузки я убедился, что морж работает на
10.211.55.18:8773/services/Walrus
- Идти к
10.211.55.18:8443
веб-портал и изменил пароль администратора - Оттуда же я получил учетные данные интерфейса запроса (id + секретный)
Я смог без проблем взаимодействовать с Walrus через Cyberduck и Cloudberry, я создал тогда bucket '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 для моего приложения, поэтому я не могу использовать сторонние инструменты.
Надеюсь, что кто-то может помочь, спасибо.
1 ответ
Ну, я обнаружил, что происходит... На самом деле, морж также включает в подпись путь / services / Walrus, я только подписывал / mybucket / myfile. Так что это можно решить, подписав строку "/ services / Walrus / bucket / file", вот и все!