2016-02-15 3 views
2

Я использую Java/Jersy Framework (Tomcat) для разработки REST API. Одной из таких функций веб-службы является перенаправление (HTTP 302) на подписанный URL S3 для файла. мы используем заголовок «Авторизация» для проверки действительности запроса. Когда эта веб-служба вызывается, служба генерирует подписанный URL с подписью и перенаправляет на подписанный Url.Как удалить заголовок авторизации в ответе http 302

кода Java с REST Web Service (Ури подписанную гиперссылка)

return Response.status(HttpStatus.SCMOVEDTEMPORARILY).location(uri).build(); 

Когда Перенаправление происходит заголовок Authorization также передается вместе с подписью. Поскольку Amazon принимает авторизацию или подпись в подписанном URL-адресе, но не оба они вызывают ошибку, как указано ниже, от Amazon S3.

Разрешен только один разрешенный механизм авторизации; только X-Amz-Algorithm параметр запроса, подпись запроса параметр строки или заголовок авторизации должен быть указан

Есть ли способ, чтобы удалить этот заголовок не отправить в то время как перенаправление происходит ...

Я попытался добавить фильтр и который переопределяет ServletResponse с помощью пользовательской реализации HttpServletResponseWrapper и записывает имена заголовков в методах addHeader и setHeader. Он никогда не вызывает этот метод для заголовка авторизации.

Модифицированный код, чтобы установить заголовок, как nulll или «» и не работает ..

return Response.status(HttpStatus.SCMOVEDTEMPORARILY).location(uri).header("Authorization",null).build(); 
return Response.status(HttpStatus.SCMOVEDTEMPORARILY).location(uri).header("Authorization","").build(); 
+0

Вы нашли решение? Я столкнулся с той же проблемой :( – marcus3006

ответ

2

В принципе, ответ редирект не имеет каких-либо «Authorization» заголовки, то «Authorization» заголовок является лишь частью запроса. Таким образом, это нормальное поведение для любого HTTP-клиента для повторной отправки всех заголовков для перенаправления местоположения, которое они отправили на исходный URL. Здесь вы ничего не можете сделать. Но большинство HTTP-клиентов повторно отправят заголовок «Авторизация», только если местоположение перенаправления находится в том же домене/происхождении. В вашем случае вы можете попытаться создать отдельный домен для URL-адреса S3 и перенаправить на него и надеяться, что клиент HTTP-клиента отбросит заголовок «Авторизация», когда обнаружит, что домен изменен (это проблема безопасности для повторной отправки «Авторизации» "при переходе на новый домен/происхождение).

+0

Спасибо, звучит разумно. Для меня «проблема» присутствовала только в wget/curl/postman clients и * not * в обычном webbrowser. – marcus3006

+0

В каждом из этих списков есть возможность включить/отключить повторную отправку заголовка Auth через аргументы. Но в любом случае для решения не существует ... – Babl

Смежные вопросы