Проблемы с эвкалиптовым моржом

Я начинаю с эвкалипта, с некоторым фоном 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", вот и все!

Другие вопросы по тегам