Запрос приложения Spring Boot через Cloudfront неожиданно завершился неудачей со статусом 403 - PullRequest
0 голосов
/ 11 ноября 2019

Когда я перехожу на web.mysite.com, статический SPA, размещенный на S3, он имеет iframe с src, равным mysite.com/some/path, который является приложением Spring Boot MVC в Elastic Beanstalk. Оба находятся за дистрибутивами Cloudfront для HTTPS. Этот путь обрабатывается в приложении с помощью специального распознавателя ресурсов. Он успешно загружается, но внутри содержимого iframe есть тег сценария для поиска mysite.com/some/path/thatsdifferent, обработанный тем же распознавателем.

Этот второй запрос завершается неудачно с 403, и я не могу определить, почему. Навигация к неудачному mysite.com/some/path/thatsdifferent непосредственно в моем браузере или использование почтальона завершается успешно со статусом 200. Сервер настроен на разрешение запросов от web.mysite.com через конфигурацию CORS (и нет сообщений об ошибках, связанных с CORS), а Spring Security настроен на permitAll любые запросы на /some/** независимо от аутентификации. За заголовком x-cache: Error from cloudfront нет тела ответа или сообщения об ошибке.

Если перейти к the-beanstalk-env-url.com/some/path, он загружает html, а затем успешно загружает содержимое из the-beanstalk-env-url.com/some/path/thatsdifferent.

Запросы на несколько разных, но похожих путей выполняются успешно. Переход к пути, который определенно не существует на 100%, возвращает 404.

Журналы сервера показывают, что запрос успешно обрабатывается, и Cloudfront возвращает разумные ответы клиенту. Просмотр журналов Cloudfront просто сообщает отчет 403. Без какой-либо дополнительной информации.

Почти 100% статей об ошибках Cloudfront 403 и вопросы касаются S3, который не относится к той части, которая дает сбой.

Изменение разрешенных методов распределения Cloudfront с GET, HEAD на GET, HEAD, OPTIONS приводит к тому, что запросы непосредственно к mysite.com/some/path/thatsdifferent начинают сбой с invalid CORS request, это было исправлено путем внесения в белый список заголовков Accept, Authorization, Host, Origin и Referer. Это не исправило основную ошибку.

Настройка ведения журнала для org.springframework.security не регистрирует дополнительную информацию при возникновении сбойного запроса, моя конфигурация безопасности приложения не является причиной ошибки.

После замены Cloudfront балансировщиком нагрузки в моей среде в Route 53 сценарий работает как положено, поэтому проблема определенно в Cloudfront.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...