ASP.NET Core에 Windows 인증을 구성 합니다.Configure Windows authentication in ASP.NET Core

작성자: Steve SmithScott AddieBy Steve Smith and Scott Addie

Iis에서 호스팅되는 ASP.NET Core 응용 프로그램에 대 한 Windows 인증을 구성할 수 있습니다 HTTP.sys, 또는 WebListener합니다.Windows authentication can be configured for ASP.NET Core apps hosted with IIS, HTTP.sys, or WebListener.

Windows 인증 이란?What is Windows authentication?

ASP.NET Core 응용 프로그램의 사용자를 인증 하는 운영 체제는 Windows 인증 사용 합니다.Windows authentication relies on the operating system to authenticate users of ASP.NET Core apps. 서버에 다른 Windows 계정 또는 Active Directory 도메인 id를 사용 하 여 사용자를 식별 하는 회사 네트워크에서 실행 될 때 Windows 인증을 사용할 수 있습니다.You can use Windows authentication when your server runs on a corporate network using Active Directory domain identities or other Windows accounts to identify users. Windows 인증은 사용자, 클라이언트 응용 프로그램 및 웹 서버는 동일한 Windows 도메인에 속해 인트라넷 환경에 가장 적합 합니다.Windows authentication is best suited to intranet environments in which users, client applications, and web servers belong to the same Windows domain.

Windows 인증 및 iis 설치에 대 한 자세한합니다.Learn more about Windows authentication and installing it for IIS.

ASP.NET Core 응용 프로그램에서 Windows 인증을 사용 하도록 설정Enable Windows authentication in an ASP.NET Core app

Visual Studio 웹 응용 프로그램 템플릿은 Windows 인증을 지원 하도록 구성할 수 있습니다.The Visual Studio Web Application template can be configured to support Windows authentication.

Windows 인증 앱 템플릿을 사용 하 여Use the Windows authentication app template

Visual Studio에서 합니다.In Visual Studio:

  1. 새 ASP.NET Core 웹 응용 프로그램을 만듭니다.Create a new ASP.NET Core Web Application.
  2. 템플릿 목록에서 웹 응용 프로그램을 선택 합니다.Select Web Application from the list of templates.
  3. 선택 된 인증 변경 선택한 단추 Windows 인증합니다.Select the Change Authentication button and select Windows Authentication.

앱을 실행합니다.Run the app. 사용자 이름 상단에 표시 됩니다. 응용 프로그램의 오른쪽입니다.The username appears in the top right of the app.

Windows 인증에 대 한 브라우저 스크린 샷

IIS Express를 사용 하 여 개발 작업에서는 서식 파일에 Windows 인증을 사용 하는 데 필요한 모든 구성을 제공 합니다.For development work using IIS Express, the template provides all the configuration necessary to use Windows authentication. 다음 섹션에는 Windows 인증에 대 한 ASP.NET Core 응용 프로그램을 수동으로 구성 하는 방법을 보여 줍니다.The following section shows how to manually configure an ASP.NET Core app for Windows authentication.

Windows 및 익명 인증에 대 한 visual Studio 설정Visual Studio settings for Windows and anonymous authentication

Visual Studio 프로젝트 속성 페이지의 디버그 탭은 Windows 인증 및 익명 인증에 대 한 확인란을 제공 합니다.The Visual Studio project Properties page's Debug tab provides check boxes for Windows authentication and anonymous authentication.

Windows 인증에 대 한 브라우저 스크린 샷

이러한 두 속성을 구성할 수 있습니다 또는 launchSettings.json 파일:Alternatively, these two properties can be configured in the launchSettings.json file:

{
    "iisSettings": {
        "windowsAuthentication": true,
        "anonymousAuthentication": false,
        "iisExpress": {
            "applicationUrl": "http://localhost:52171/",
            "sslPort": 0
        }
    } // additional options trimmed
}

Iis Windows 인증을 사용 하도록 설정Enable Windows authentication with IIS

IIS에서 사용 하는 ASP.NET Core 모듈 ASP.NET Core 응용 프로그램 호스트에 있습니다.IIS uses the ASP.NET Core Module to host ASP.NET Core apps. 모듈을 사용 하면 Windows 인증을 기본적으로 IIS에 전달 합니다.The module allows Windows authentication to flow to IIS by default. Iis에서 응용 프로그램이 아닌 Windows 인증이 구성 됩니다.Windows authentication is configured in IIS, not the app. 다음 섹션에서는 Windows 인증을 사용 하도록 ASP.NET Core 응용 프로그램을 구성 하려면 IIS 관리자를 사용 하는 방법을 보여 줍니다.The following sections show how to use IIS Manager to configure an ASP.NET Core app to use Windows authentication.

새 IIS 사이트 만들기Create a new IIS site

이름 및 폴더를 지정 하 고 새 응용 프로그램 풀을 만들 수 있도록 허용 합니다.Specify a name and folder and allow it to create a new application pool.

인증을 사용자 지정Customize authentication

사이트에 대 한 인증 메뉴를 엽니다.Open the Authentication menu for the site.

IIS 인증 메뉴

익명 인증을 사용 하지 않도록 설정 하 고 Windows 인증을 사용 하도록 설정 합니다.Disable Anonymous Authentication and enable Windows Authentication.

IIS 인증 설정

IIS 사이트 폴더에 프로젝트를 게시 합니다.Publish your project to the IIS site folder

Visual Studio 또는.NET Core CLI를 사용 하 여 대상 폴더에 응용 프로그램을 게시 합니다.Using Visual Studio or the .NET Core CLI, publish the app to the destination folder.

Visual Studio 게시 대화 상자

에 대 한 자세한 내용은 를 IIS에 게시합니다.Learn more about publishing to IIS.

Windows 인증 작동 확인 응용 프로그램을 실행 합니다.Launch the app to verify Windows authentication is working.

HTTP.sys 또는 WebListener와 함께 Windows 인증을 사용 하도록 설정Enable Windows authentication with HTTP.sys or WebListener

Kestrel Windows 인증을 지원 하지 않지만 사용할 수 있습니다 HTTP.sys Windows에서 자체 호스팅된 시나리오를 지원 합니다.Although Kestrel doesn't support Windows authentication, you can use HTTP.sys to support self-hosted scenarios on Windows. 다음 예제에서는 Windows 인증과 함께 HTTP.sys를 사용 하도록 응용 프로그램의 웹 호스트를 구성 합니다.The following example configures the app's web host to use HTTP.sys with Windows authentication:

public class Program
{
    public static void Main(string[] args) => 
        BuildWebHost(args).Run();

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseHttpSys(options =>
            {
                options.Authentication.Schemes = 
                    AuthenticationSchemes.NTLM | AuthenticationSchemes.Negotiate;
                options.Authentication.AllowAnonymous = false;
            })
            .Build();
}

Windows 인증 사용Work with Windows authentication

구성 상태에 대 한 익명 액세스 결정 되는 방식으로 [Authorize][AllowAnonymous] 특성이 앱에서 사용 됩니다.The configuration state of anonymous access determines the way in which the [Authorize] and [AllowAnonymous] attributes are used in the app. 다음 두 섹션에서는 익명 액세스의 허용 되 고 허용 되지 않는 구성 상태를 처리 하는 방법을 설명 합니다.The following two sections explain how to handle the disallowed and allowed configuration states of anonymous access.

익명 액세스 허용 안 함Disallow anonymous access

Windows 인증을 사용 하 고 익명 액세스를 비활성화 하는 경우는 [Authorize][AllowAnonymous] 특성은 효과가 없습니다.When Windows authentication is enabled and anonymous access is disabled, the [Authorize] and [AllowAnonymous] attributes have no effect. IIS 사이트 (또는 HTTP.sys 또는 WebListener 서버)에 익명 액세스를 허용 하도록 구성 된, 경우 요청에 결코 응용 프로그램에 도달 합니다.If the IIS site (or HTTP.sys or WebListener server) is configured to disallow anonymous access, the request never reaches your app. 이러한 이유로 [AllowAnonymous] 특성은 적용 되지 않습니다.For this reason, the [AllowAnonymous] attribute isn't applicable.

익명 액세스 허용Allow anonymous access

사용 하 여 Windows 인증 및 익명 액세스를 모두 설정 된 경우는 [Authorize][AllowAnonymous] 특성입니다.When both Windows authentication and anonymous access are enabled, use the [Authorize] and [AllowAnonymous] attributes. [Authorize] 특성을 사용 하면 Windows 인증 필요 진정으로 응용 프로그램의 부분을 보호할 수 있습니다.The [Authorize] attribute allows you to secure pieces of the app which truly do require Windows authentication. [AllowAnonymous] 특성 재정의 [Authorize] 특성 익명 액세스를 허용 하는 앱 내에서 사용 합니다.The [AllowAnonymous] attribute overrides [Authorize] attribute usage within apps which allow anonymous access. 참조 간단한 인증 특성 사용 정보에 대 한 합니다.See Simple Authorization for attribute usage details.

ASP.NET Core에서 2.x는 [Authorize] 특성 추가 구성이 필요 Startup.cs Windows 인증에 대 한 익명 요청을 보도록 하기 위해서입니다.In ASP.NET Core 2.x, the [Authorize] attribute requires additional configuration in Startup.cs to challenge anonymous requests for Windows authentication. 권장된 구성을 사용 하 고 웹 서버에 따라 약간 다릅니다.The recommended configuration varies slightly based on the web server being used.

참고

기본적으로 빈 403 HTTP 응답을 페이지에 액세스할 수 있는 권한 부족 한 사용자 표시 됩니다.By default, users who lack authorization to access a page are presented with an empty HTTP 403 response. StatusCodePages 미들웨어 "액세스 거부" 더 나은 환경을 제공 하기 위해 구성할 수 있습니다.The StatusCodePages middleware can be configured to provide users with a better "Access Denied" experience.

IISIIS

IIS를 사용 하는 경우 다음을 추가 ConfigureServices 메서드:If using IIS, add the following to the ConfigureServices method:

// IISDefaults requires the following import:
// using Microsoft.AspNetCore.Server.IISIntegration;
services.AddAuthentication(IISDefaults.AuthenticationScheme);

HTTP.sysHTTP.sys

HTTP.sys를 사용 하는 경우 다음을 추가 ConfigureServices 메서드:If using HTTP.sys, add the following to the ConfigureServices method:

// HttpSysDefaults requires the following import:
// using Microsoft.AspNetCore.Server.HttpSys;
services.AddAuthentication(HttpSysDefaults.AuthenticationScheme);

가장Impersonation

ASP.NET Core 가장을 구현 하지 않습니다.ASP.NET Core doesn't implement impersonation. 앱에 대 한 모든 요청을 응용 프로그램 풀 또는 프로세스 id를 사용 하 여 응용 프로그램 id로 실행 됩니다.Apps run with the application identity for all requests, using app pool or process identity. 사용 하 여 명시적으로 사용자를 대신 하 여 작업을 수행 해야 할 경우 WindowsIdentity.RunImpersonated합니다.If you need to explicitly perform an action on behalf of a user, use WindowsIdentity.RunImpersonated. 이 컨텍스트에서 단일 작업을 실행 하 고 컨텍스트를 닫습니다.Run a single action in this context and then close the context.

app.Run(async (context) =>
{
    try
    {
        var user = (WindowsIdentity)context.User.Identity;

        await context.Response
                     .WriteAsync($"User: {user.Name}\tState: {user.ImpersonationLevel}\n");

        WindowsIdentity.RunImpersonated(user.AccessToken, () =>
        {
            var impersonatedUser = WindowsIdentity.GetCurrent();
            var message =
                $"User: {impersonatedUser.Name}\tState: {impersonatedUser.ImpersonationLevel}";

            var bytes = Encoding.UTF8.GetBytes(message);
            context.Response.Body.Write(bytes, 0, bytes.Length);
        });
    }
    catch (Exception e)
    {
        await context.Response.WriteAsync(e.ToString());
    }
});

RunImpersonated 비동기 작업을 지원 하지 않으므로 하 고 복잡 한 시나리오에 사용할 수 없습니다.Note that RunImpersonated doesn't support asynchronous operations and shouldn't be used for complex scenarios. 예를 들어 전체 요청 또는 미들웨어 체인 래핑 지원 아니거나 것이 좋습니다.For example, wrapping entire requests or middleware chains isn't supported or recommended.