CEPH + S3 Java SDK + предварительно подписанный PUT + CORS = FAIL

Я ищу волшебную формулу, чтобы заставить работать CEPH + S3 Java SDK + предварительно заданный URL-адрес PUT + CORS. Мы можем создать бакет, а затем применить к нему конфигурацию CORS. Затем мы можем создать предварительно сгенерированный URL-адрес PUT, который затем отправим обратно клиенту. Однако запрос предварительной проверки CORS (параметры) не выполняется с ошибкой 403.

Против AWS этот же код отлично работает. Однако и Swift, и Ceph не справляются с запросом OPTIONS с 403. Поскольку OPTIONS не работает, CORS терпит неудачу. Мы отследили (как нам кажется) возможную ошибку в RADOSGW в том, как он создает заголовок аутентификации ... он не соответствует процессу подписи, используемому SDK Amazon. Например:

AWS Java auth hdr that gets signed:
PUT

image/jpeg
1404252781
x-amz-meta-origfile:Desert.jpg
/virbsupport/78946140-4638-4338-b765-6f701c453a89?response-content-disposition=attachment; filename=Desert.jpg

In Ceph:
OPTIONS


1404252781
/virbsupport/78946140-4638-4338-b765-6f701c453a89?response-content-disposition=attachment; filename=Desert.jpg

Мы можем работать с отсутствующим типом контента и дополнительными полями метаданных, но заметим, что МЕТОД полностью неверен. RADOSGW Я думаю, что в качестве метода в подписи следует использовать "Access-Control-Request-Method" ... а не фактический метод OPTIONS, используемый для предполетного запроса.

У кого-нибудь получилось заставить эту комбинацию функционировать?


person hubbardr    schedule 01.07.2014    source источник


Ответы (1)


Мы закончили регистрацию ошибки в библиотеке Ceph RGW для этой проблемы. http://tracker.ceph.com/issues/8718#change-38624

person hubbardr    schedule 04.08.2014