ASP.NET Core 응용 프로그램에서 SSL을 강제 적용Enforcing SSL in an ASP.NET Core app

작성자: Rick AndersonBy Rick Anderson

이 문서에서는 표시 하는 방법:This document shows how to:

  • 모든 요청 (HTTPS 요청에만 해당)에 대 한 SSL이 필요 합니다.Require SSL for all requests (HTTPS requests only).
  • HTTPS에 대 한 모든 HTTP 요청을 리디렉션하십시오.Redirect all HTTP requests to HTTPS.

SSL 필요Require SSL

RequireHttpsAttribute ssl을 사용 하는 데 사용 됩니다.The RequireHttpsAttribute is used to require SSL. 컨트롤러 또는이 특성을 사용 하 여 메서드를 데코레이팅 할 수 있습니다 하거나 아래와 같이 전체적으로 적용할 수 있습니다.You can decorate controllers or methods with this attribute or you can apply it globally as shown below:

다음 코드를 추가 ConfigureServicesStartup:Add the following code to ConfigureServices in Startup:

// Requires using Microsoft.AspNetCore.Mvc;
public void ConfigureServices(IServiceCollection services)
{
    services.Configure<MvcOptions>(options =>
    {
        options.Filters.Add(new RequireHttpsAttribute());
    });

위의 강조 표시 된 코드에서는 모든 요청 사용 HTTPS, 따라서 HTTP 요청은 무시 됩니다.The highlighted code above requires all requests use HTTPS, therefore HTTP requests are ignored. 다음 강조 표시 된 코드를 HTTPS로 모든 HTTP 요청을 리디렉션합니다.The following highlighted code redirects all HTTP requests to HTTPS:

// Requires using Microsoft.AspNetCore.Rewrite;
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();

    var options = new RewriteOptions()
       .AddRedirectToHttps();

    app.UseRewriter(options);

참조 URL 다시 쓰기 미들웨어 자세한 정보에 대 한 합니다.See URL Rewriting Middleware for more information.

HTTPS를 전역적으로 요구 (options.Filters.Add(new RequireHttpsAttribute());) 보안 모범 사례입니다.Requiring HTTPS globally (options.Filters.Add(new RequireHttpsAttribute());) is a security best practice. 적용 된 [RequireHttps] 모든 컨트롤러에는 특성을 전역으로 HTTPS를 요구 하는 것 만큼 안전 간주 되지 않습니다.Applying the [RequireHttps] attribute to all controller is not considered as secure as requiring HTTPS globally. 보장할 수 없습니다 적용할 저장 되므로 응용 프로그램에 추가 하는 새로운 컨트롤러는 [RequireHttps] 특성입니다.You can't guarantee new controllers added to your app will remember to apply the [RequireHttps] attribute.