Терминирование SSL/TLS, пересылка заголовков и обнаружение защищённых запросов¶
В случае SSL-терминирования протокол HTTPS используется только для связи с обратным прокси-сервером, а обратный прокси связывается с приложением, передавая запрос, по протоколу HTTP.
Для правильной работы HttpsRedirectionMiddleware Kestrel требуется узнать, был ли исходный запрос HTTP или HTTPS-запросом.
Стандартный подход, используемый большинством обратных прокси (таких как IIS и NGINX), заключается в добавлении заголовков к запросу. А именно — добавляется заголовок X-Forwarded-Proto, указывающий на протокол исходного запроса.
ASP.NET Core включает ForwardedHeadersMiddleware для поиска этого (и других) заголовка и обновляет запрос, чтобы приложение воспринимало его как защищённый.
Если используется IIS с методом расширения UseIisIntegration(), то пересылка заголовка обрабатывается автоматически. Если применяется другой обратный прокси-сервер, то нужно сконфигурировать это поведение переменной окружения ASPNETCORE_FORWARDEDHEADERS_ENABLED=true или в коде.
Когда обратный прокси пересылает запрос, ForwardedHeadersMiddleware будет искать заголовок X-Forwarded-Proto и при необходимости обновит детали запроса. После этого для всех последующих компонентов конвейера запрос считается безопасным. При добавлении ForwardedHeadersMiddleware вручную его важно разместить перед вызовом методов UseHsts() и UseHttpsRedirection(), чтобы перенаправленные заголовки были прочитаны.
Дата создания : 24 октября 2022 г.