Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

4 года назад
Открыть в
День 1309. #ЗаметкиНаПолях Принудительный HTTPS в Приложениях ASP.NET Core. Окончание Начало Перенаправление HTTPS и API Подход с перенаправлением HTTPS основан на отправке обратно клиенту кода состояния 301 или другого 30* HTTP, независимо от того, используете ли вы атрибут RequireHttps или ПО промежуточного слоя для перенаправления HTTPS. Подход HSTS основан на отправке заголовка Strict-Transport-Security. Оба подхода хорошо понимаются стандартными браузерами. Таким образом, на эти подходы могут полагаться типы приложений, клиентами которых являются браузеры, например приложения ASP.NET Core MVC, Razor Pages и Blazor Server. Однако эти подходы обычно игнорируются небраузерными клиентами, такими как клиенты API. Мобильное приложение или SPA крайне редко заботятся о кодах состояния 301 или заголовках HSTS. В этом случае есть два альтернативных способа работы с клиентами, которые делают HTTP-запросы: 1. Игнорировать HTTP-запросы Один из самых простых способов — использовать флаг --urls команды запуска dotnet, как показано ниже:
dotnet run --urls "https://localhost:7123"
Это переопределит настройки URL в файле Properties/launchSettings.json проекта ASP.NET Core. В производственной среде можно задать переменную окружения ASPNETCORE_URLS. PowerShell:
$Env: ASPNETCORE_URLS = "https://localhost:7123"
Bash:
export ASPNETCORE_URLS=https://localhost:7123

2. Выдавать на HTTP-запросы код ответа Bad Request Для этого потребуется собственное промежуточное ПО вместо UseHttpsRedirection() и UseHsts():
//app.UseHttpsRedirection();
app.Use(async (context, next) => {
  if (!context.Request.IsHttps) {
    context.Response.StatusCode =
     StatusCodes.Status400BadRequest;
    
    await context
     .Response
     .WriteAsync("HTTPS required!");
  } 
  else {
    await next(context);
  }
});

Код выше просто проверяет, использует ли текущий запрос HTTPS. Если это не так, он отвечает кодом состояния 400 Bad Request и сообщением, предупреждающим, что требуется HTTPS. Перенаправление HTTPS и обратные прокси Все вышеизложенное имеет смысл, если ваше приложение ASP.NET Core напрямую подключено к Интернету. Если ваше приложение развернуто в среде с обратным прокси-сервером, который обеспечивает безопасность подключения, нет необходимости использовать перенаправление HTTPS или промежуточное ПО HSTS. В этом случае вы можете просто удалить вызовы методов UseHttpsRedirection() и UseHsts() из веб-приложений или собственное промежуточное ПО из примера выше для веб-API. Вы делегируете переключение с HTTP на HTTPS и управление ответами обратному прокси-серверу. Источник: https://auth0.com/blog/force-https-in-aspnet-core-apps/