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

하 여 Scott AddieLuke LathamBy Scott Addie and Luke Latham

사용 하 여 호스팅되는 ASP.NET Core 앱에 대 한 Windows 인증 (라고도: Negotiate, Kerberos 또는 NTLM 인증)를 구성할 수 있습니다 IIS하십시오 Kestrel, 또는 HTTP.sys .Windows Authentication (also known as Negotiate, Kerberos, or NTLM authentication) can be configured for ASP.NET Core apps hosted with IIS, Kestrel, or HTTP.sys.

사용 하 여 호스팅되는 ASP.NET Core 앱에 대 한 Windows 인증 (라고도: Negotiate, Kerberos 또는 NTLM 인증)를 구성할 수 있습니다 IIS 하거나 HTTP.sys합니다.Windows Authentication (also known as Negotiate, Kerberos, or NTLM authentication) can be configured for ASP.NET Core apps hosted with IIS or HTTP.sys.

Windows 인증은 ASP.NET Core 앱의 사용자를 인증 하는 운영 체제에서 사용 합니다.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 Windows accounts to identify users. Windows 인증은 인트라넷 환경 사용자, 클라이언트 앱 및 웹 서버는 동일한 Windows 도메인에 속해야 하는 위치에 가장 적합 합니다.Windows Authentication is best suited to intranet environments where users, client apps, and web servers belong to the same Windows domain.

참고

HTTP/2를 사용 하 여 Windows 인증이 지원 되지 않습니다.Windows Authentication isn't supported with HTTP/2. HTTP/2 응답에서 인증 질문을 보낼 수 있습니다 하지만 인증 하기 전에 클라이언트 HTTP/1.1로 다운 그레이드 해야 합니다.Authentication challenges can be sent on HTTP/2 responses, but the client must downgrade to HTTP/1.1 before authenticating.

IIS/IIS ExpressIIS/IIS Express

인증 서비스를 호출 하 여 추가 AddAuthentication (Microsoft.AspNetCore.Server.IISIntegration 네임 스페이스)에서 Startup.ConfigureServices:Add authentication services by invoking AddAuthentication (Microsoft.AspNetCore.Server.IISIntegration namespace) in Startup.ConfigureServices:

services.AddAuthentication(IISDefaults.AuthenticationScheme);

시작 설정 (디버거)Launch settings (debugger)

시작 설정에 대 한 구성에만 적용 합니다 Properties/launchSettings.json IIS Express에 대 한 파일을 IIS에 대 한 Windows 인증을 구성 하지 않습니다.Configuration for launch settings only affects the Properties/launchSettings.json file for IIS Express and doesn't configure IIS for Windows Authentication. 서버 구성에 설명 되어는 IIS 섹션입니다.Server configuration is explained in the IIS section.

합니다 웹 응용 프로그램 Visual Studio 또는.NET Core CLI를 통해 사용할 수 있는 템플릿을 업데이트 하는 Windows 인증을 지원 하도록 구성할 수 있습니다 합니다 Properties/launchSettings.json 파일 자동으로 합니다.The Web Application template available via Visual Studio or the .NET Core CLI can be configured to support Windows Authentication, which updates the Properties/launchSettings.json file automatically.

새 프로젝트New project

  1. 새 프로젝트를 만듭니다.Create a new project.
  2. 새 ASP.NET Core 웹 응용 프로그램을 선택합니다.Select ASP.NET Core Web Application. 새로 만들기를 선택합니다.Select Next.
  3. 에 이름을 제공 합니다 프로젝트 이름 필드입니다.Provide a name in the Project name field. 확인 합니다 위치 항목이 올바른 또는 프로젝트의 위치를 지정 합니다.Confirm the Location entry is correct or provide a location for the project. 만들기를 선택합니다.Select Create.
  4. 선택 변경 아래에서 인증합니다.Select Change under Authentication.
  5. 인증 변경 창에서 Windows 인증합니다.In the Change Authentication window, select Windows Authentication. 확인을 선택합니다.Select OK.
  6. 웹 애플리케이션을 선택합니다.Select Web Application.
  7. 만들기를 선택합니다.Select Create.

앱을 실행합니다.Run the app. 렌더링 된 앱의 사용자 인터페이스에 사용자 이름이 표시 됩니다.The username appears in the rendered app's user interface.

기존 프로젝트Existing project

Windows 인증을 사용 하도록 설정 하 고 익명 인증을 사용 하지 않도록 설정 하는 프로젝트의 속성:The project's properties enable Windows Authentication and disable Anonymous Authentication:

  1. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.Right-click the project in Solution Explorer and select Properties.
  2. 디버그 탭을 선택합니다.Select the Debug tab.
  3. 에 대 한 확인란의 선택을 취소 익명 인증 사용합니다.Clear the check box for Enable Anonymous Authentication.
  4. 에 대 한 확인란을 선택 Windows 인증 사용합니다.Select the check box for Enable Windows Authentication.
  5. 저장 하 고 속성 페이지를 닫습니다.Save and close the property page.

속성에서 구성할 수 있습니다 또는 합니다 iisSettings 의 노드는 launchSettings.json 파일:Alternatively, the properties can be configured in the iisSettings node of the launchSettings.json file:

"iisSettings": {
    "windowsAuthentication": true,
    "anonymousAuthentication": false,
    "iisExpress": {
        "applicationUrl": "http://localhost:52171/",
        "sslPort": 44308
    }
}

기존 프로젝트를 수정 하는 경우 프로젝트 파일에 대 한 패키지 참조를 포함 되어 있는지 확인 합니다 Microsoft.AspNetCore.App 메타 패키지 하거나 Microsoft.AspNetCore.Authentication NuGet 패키지.When modifying an existing project, confirm that the project file includes a package reference for the Microsoft.AspNetCore.App metapackage or the Microsoft.AspNetCore.Authentication NuGet package.

IISIIS

IIS에서 사용 하 여 ASP.NET Core 모듈 ASP.NET Core 앱을 호스트 하 합니다.IIS uses the ASP.NET Core Module to host ASP.NET Core apps. Windows 인증을 통해 IIS에 대해 구성 된 합니다 web.config 파일입니다.Windows Authentication is configured for IIS via the web.config file. 다음 섹션은 표시 하는 방법.The following sections show how to:

  • 로컬 제공할 web.config 앱을 배포할 때 서버에서 Windows 인증을 활성화 하는 파일입니다.Provide a local web.config file that activates Windows Authentication on the server when the app is deployed.
  • IIS 관리자를 사용 하 여 구성 하는 web.config 서버에 이미 배포 된 ASP.NET Core 앱의 파일입니다.Use the IIS Manager to configure the web.config file of an ASP.NET Core app that has already been deployed to the server.

이미 않았다면 IIS을 사용 하 여 ASP.NET Core 앱을 호스트할 수 있습니다.If you haven't already done so, enable IIS to host ASP.NET Core apps. 자세한 내용은 IIS가 있는 Windows에서 ASP.NET Core 호스팅을 참조하세요.For more information, see IIS가 있는 Windows에서 ASP.NET Core 호스팅.

Windows 인증을 위해 IIS 역할 서비스를 사용 하도록 설정 합니다.Enable the IIS Role Service for Windows Authentication. 자세한 내용은 IIS 역할 서비스 (2 단계 참조)에서 Windows 인증 사용합니다.For more information, see Enable Windows Authentication in IIS Role Services (see Step 2).

IIS 통합 미들웨어 기본적으로 자동으로 요청을 인증 하도록 구성 됩니다.IIS Integration Middleware is configured to automatically authenticate requests by default. 자세한 내용은 참조 하세요. IIS 사용 하 여 Windows에서 ASP.NET Core 호스팅. IIS 옵션 (AutomaticAuthentication)합니다.For more information, see Host ASP.NET Core on Windows with IIS: IIS options (AutomaticAuthentication).

ASP.NET Core 모듈은 기본적으로 앱에 Windows 인증 토큰을 전달 하도록 구성 됩니다.The ASP.NET Core Module is configured to forward the Windows Authentication token to the app by default. 자세한 내용은 참조 하세요. ASP.NET Core 모듈 구성 참조: AspNetCore 요소의 특성합니다.For more information, see ASP.NET Core Module configuration reference: Attributes of the aspNetCore element.

사용 하 여 하거나 다음 방법 중:Use either of the following approaches:

  • 게시 하 고 프로젝트를 배포 하기 전에 다음을 추가 합니다 web.config 프로젝트 루트에 파일:Before publishing and deploying the project, add the following web.config file to the project root:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <location path="." inheritInChildApplications="false">
        <system.webServer>
          <security>
            <authentication>
              <anonymousAuthentication enabled="false" />
              <windowsAuthentication enabled="true" />
            </authentication>
          </security>
        </system.webServer>
      </location>
    </configuration>
    

    .NET Core SDK에 의해 프로젝트를 게시 하는 경우 (없이 <IsTransformWebConfigDisabled> 속성이로 설정 true 프로젝트 파일에서), 게시 된 web.config 파일에는 <location><system.webServer><security><authentication> 섹션입니다.When the project is published by the .NET Core SDK (without the <IsTransformWebConfigDisabled> property set to true in the project file), the published web.config file includes the <location><system.webServer><security><authentication> section. 에 대 한 자세한 합니다 <IsTransformWebConfigDisabled> 속성 참조 IIS가 있는 Windows에서 ASP.NET Core 호스팅합니다.For more information on the <IsTransformWebConfigDisabled> property, see IIS가 있는 Windows에서 ASP.NET Core 호스팅.

  • 게시 및 프로젝트를 배포한 후 IIS 관리자를 사용 하 여 서버 쪽 구성 작업을 수행 합니다.After publishing and deploying the project, perform server-side configuration with the IIS Manager:

    1. IIS 관리자에서 IIS 사이트를 선택 합니다 사이트 노드의 합니다 연결 사이드바 합니다.In IIS Manager, select the IIS site under the Sites node of the Connections sidebar.
    2. 두 번 클릭 AuthenticationIIS 영역입니다.Double-click Authentication in the IIS area.
    3. 선택 익명 인증합니다.Select Anonymous Authentication. 선택 사용 안 함작업 사이드바 합니다.Select Disable in the Actions sidebar.
    4. Windows 인증을 선택합니다.Select Windows Authentication. 선택 사용 하도록 설정작업 보충 합니다.Select Enable in the Actions sidebar.

    이러한 조치로, IIS 관리자 앱의 수정 web.config 파일입니다.When these actions are taken, IIS Manager modifies the app's web.config file. A <system.webServer><security><authentication> 에 대 한 업데이트 된 설정으로 노드가 추가 됩니다 anonymousAuthenticationwindowsAuthentication:A <system.webServer><security><authentication> node is added with updated settings for anonymousAuthentication and windowsAuthentication:

    <system.webServer>
      <security>
        <authentication>
          <anonymousAuthentication enabled="false" />
          <windowsAuthentication enabled="true" />
        </authentication>
      </security>
    </system.webServer>
    

    <system.webServer> 섹션에 추가 합니다 web.config IIS 관리자에 의해 파일이 앱의 외부 <location> 섹션에서는 앱을 게시할 때.NET Core SDK에 의해 추가 합니다.The <system.webServer> section added to the web.config file by IIS Manager is outside of the app's <location> section added by the .NET Core SDK when the app is published. 섹션 외부의 추가 되기 때문에 합니다 <location> 노드를 설정에서 상속 됩니다 하위 앱 현재 앱.Because the section is added outside of the <location> node, the settings are inherited by any sub-apps to the current app. 상속을 방지 하려면 추가 이동 <security> 섹션 내에 <location><system.webServer> .NET Core SDK를 제공 하는 섹션입니다.To prevent inheritance, move the added <security> section inside of the <location><system.webServer> section that the .NET Core SDK provided.

    앱에만 적용 IIS 구성을 추가 하려면 IIS 관리자를 사용 하면 web.config 서버의 파일입니다.When IIS Manager is used to add the IIS configuration, it only affects the app's web.config file on the server. 앱의 후속 배포 하는 경우 서버에서 설정을 덮어쓸 수 있습니다 서버의 복사본 web.config 프로젝트의 바뀝니다 web.config 파일입니다.A subsequent deployment of the app may overwrite the settings on the server if the server's copy of web.config is replaced by the project's web.config file. 사용 하 여 하거나 설정을 관리 하려면 다음 방법 중:Use either of the following approaches to manage the settings:

    • 설정을 다시 설정 하려면 IIS 관리자를 사용 합니다 web.config 배포에서 파일을 덮어쓸지 후 파일입니다.Use IIS Manager to reset the settings in the web.config file after the file is overwritten on deployment.
    • 추가 된 web.config 파일 설정 사용 하 여 로컬 앱.Add a web.config file to the app locally with the settings.

KestrelKestrel

합니다 Microsoft.AspNetCore.Authentication.Negotiate NuGet 패키지 사용 될 수 있습니다 Kestrel Negotiate, Kerberos 및 NTLM을 사용 하 여 Windows, Linux 및 macOS에서 Windows 인증을 지원 하도록 합니다.The Microsoft.AspNetCore.Authentication.Negotiate NuGet package can be used with Kestrel to support Windows Authentication using Negotiate, Kerberos, and NTLM on Windows, Linux, and macOS.

경고

연결에 대 한 요청에서 자격 증명을 유지할 수 있습니다.Credentials can be persisted across requests on a connection. 협상 프록시 Kestrel 사용 하 여 1:1 연결 선호도 (영구 연결)를 유지 하지 않는 인증 프록시를 사용 하 여 사용 하면 안 됩니다.Negotiate authentication must not be used with proxies unless the proxy maintains a 1:1 connection affinity (a persistent connection) with Kestrel. 즉, Negotiate 인증을 IIS 뒤에 있는 Kestrel을 사용 하 여 사용할 해야 ancm (ASP.NET Core 모듈은) out of process합니다.This means that Negotiate authentication must not be used with Kestrel behind the IIS ASP.NET Core Module (ANCM) out-of-process.

인증 서비스를 호출 하 여 추가 AddAuthentication (Microsoft.AspNetCore.Authentication.Negotiate 네임 스페이스) 및 AddNegotitate (Microsoft.AspNetCore.Authentication.Negotiate 네임 스페이스)에서 Startup.ConfigureServices:Add authentication services by invoking AddAuthentication (Microsoft.AspNetCore.Authentication.Negotiate namespace) and AddNegotitate (Microsoft.AspNetCore.Authentication.Negotiate namespace) in Startup.ConfigureServices:

services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
   .AddNegotiate();

호출 하 여 인증 미들웨어를 추가할 UseAuthentication 에서 Startup.Configure:Add Authentication Middleware by calling UseAuthentication in Startup.Configure:

app.UseAuthentication();

app.UseMvc();

미들웨어에 대 한 자세한 내용은 참조 하세요. ASP.NET Core 미들웨어 기본 사항합니다.For more information on middleware, see ASP.NET Core 미들웨어 기본 사항.

익명 요청 허용 됩니다.Anonymous requests are allowed. 사용 하 여 ASP.NET Core 권한 부여 인증에 대 한 익명 요청 수입니다.Use ASP.NET Core Authorization to challenge anonymous requests for authentication.

Windows 환경 구성Windows environment configuration

합니다 Microsoft.AspNetCore.Authentication.Negotiate 사용자 모드 인증을 수행 하는 구성 요소입니다.The Microsoft.AspNetCore.Authentication.Negotiate component performs User Mode authentication. 서비스 사용자 이름 (Spn) 컴퓨터 계정이 아닌 서비스를 실행 하는 사용자 계정에 추가 되어야 합니다.Service Principal Names (SPNs) must be added to the user account running the service, not the machine account. 실행 setspn -S HTTP/mysrevername.mydomain.com myuser 관리 명령 셸에서 합니다.Execute setspn -S HTTP/mysrevername.mydomain.com myuser in an administrative command shell.

Linux 및 macOS 환경 구성Linux and macOS environment configuration

Linux 또는 macOS 컴퓨터를 Windows 도메인 가입에 대 한 지침은 합니다 Kerberos Windows 인증을 사용 하 여 SQL Server를 Azure Data Studio 연결 문서.Instructions for joining a Linux or macOS machine to a Windows domain are available in the Connect Azure Data Studio to your SQL Server using Windows authentication - Kerberos article. 지침을 도메인에 Linux 컴퓨터에 대 한 컴퓨터 계정을 만듭니다.The instructions create a machine account for the Linux machine on the domain. 해당 컴퓨터 계정에 Spn은 추가 해야 합니다.SPNs must be added to that machine account.

참고

지침에 따라 하는 경우는 Azure Data Studio Kerberos Windows 인증을 사용 하 여 SQL Server에 연결 문서를 교체 python-software-properties 사용 하 여 python3-software-properties 필요한 경우.When following the guidance in the Connect Azure Data Studio to your SQL Server using Windows authentication - Kerberos article, replace python-software-properties with python3-software-properties if needed.

제공 하는 데 필요한 추가 단계는 Linux 또는 macOS 컴퓨터에 도메인에 가입 되 면을 keytab 파일 Spn을 사용 하 여:Once the Linux or macOS machine is joined to the domain, additional steps are required to provide a keytab file with the SPNs:

  • 도메인 컨트롤러에서 컴퓨터 계정에 새 웹 서비스 Spn을 추가 합니다.On the domain controller, add new web service SPNs to the machine account:
    • setspn -S HTTP/mywebservice.mydomain.com mymachine
    • setspn -S HTTP/mywebservice@MYDOMAIN.COM mymachine
  • 사용 하 여 ktpass keytab 파일을 생성 하려면:Use ktpass to generate a keytab file:
    • ktpass -princ HTTP/mywebservice.mydomain.com@MYDOMAIN.COM -pass myKeyTabFilePassword -mapuser MYDOMAIN\mymachine$ -pType KRB5_NT_PRINCIPAL -out c:\temp\mymachine.HTTP.keytab -crypto AES256-SHA1
    • 표시 된 대로 대문자로에서 일부 필드를 지정 되어야 합니다.Some fields must be specified in uppercase as indicated.
  • Linux 또는 macOS 컴퓨터에 키 파일을 복사 합니다.Copy the keytab file to the Linux or macOS machine.
  • 환경 변수를 통해 keytab 파일을 선택 합니다. export KRB5_KTNAME=/tmp/mymachine.HTTP.keytabSelect the keytab file via an environment variable: export KRB5_KTNAME=/tmp/mymachine.HTTP.keytab
  • 호출 klist 현재 사용 가능한 Spn을 표시 합니다.Invoke klist to show the SPNs currently available for use.

참고

Keytab 파일을 도메인 액세스 자격 증명을 포함 하 고 적절 하 게 보호 되어야 합니다.A keytab file contains domain access credentials and must be protected accordingly.

HTTP.sysHTTP.sys

HTTP.sys 협상, NTLM 또는 기본 인증을 사용 하 여 커널 모드 Windows 인증을 지원 합니다.HTTP.sys supports Kernel Mode Windows Authentication using Negotiate, NTLM, or Basic authentication.

인증 서비스를 호출 하 여 추가 AddAuthentication (Microsoft.AspNetCore.Server.HttpSys 네임 스페이스)에서 Startup.ConfigureServices:Add authentication services by invoking AddAuthentication (Microsoft.AspNetCore.Server.HttpSys namespace) in Startup.ConfigureServices:

services.AddAuthentication(HttpSysDefaults.AuthenticationScheme);

Windows 인증을 사용 하 여 HTTP.sys를 사용 하도록 앱의 웹 호스트 구성 (Program.cs).Configure the app's web host to use HTTP.sys with Windows Authentication (Program.cs). UseHttpSysMicrosoft.AspNetCore.Server.HttpSys 네임 스페이스입니다.UseHttpSys is in the Microsoft.AspNetCore.Server.HttpSys namespace.

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>()
                    .UseHttpSys(options =>
                    {
                        options.Authentication.Schemes = 
                            AuthenticationSchemes.NTLM | 
                            AuthenticationSchemes.Negotiate;
                        options.Authentication.AllowAnonymous = false;
                    });
            });
}
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();
}

참고

HTTP.sys는 Kerberos 인증 프로토콜을 사용하여 커널 모드 인증에 위임합니다.HTTP.sys delegates to kernel mode authentication with the Kerberos authentication protocol. 사용자 모드 인증은 Kerberos 및 HTTP.sys로 지원되지 않습니다.User mode authentication isn't supported with Kerberos and HTTP.sys. 머신 계정은 Active Directory에서 가져온 Kerberos 토큰/티켓의 암호를 해독하는 데 사용되고 사용자를 인증하는 서버에 클라이언트에 의해 전달되어야 합니다.The machine account must be used to decrypt the Kerberos token/ticket that's obtained from Active Directory and forwarded by the client to the server to authenticate the user. 앱의 사용자가 아닌 호스트에 대해 SPN(서비스 사용자 이름)을 등록합니다.Register the Service Principal Name (SPN) for the host, not the user of the app.

참고

HTTP.sys는 Nano Server 버전 1709 이상에서 지원 되지 않습니다.HTTP.sys isn't supported on Nano Server version 1709 or later. Nano Server를 사용 하 여 Windows 인증 및 HTTP.sys를 사용 하려면 사용 된 Server Core (microsoft/windowsservercore) 컨테이너합니다.To use Windows Authentication and HTTP.sys with Nano Server, use a Server Core (microsoft/windowsservercore) container. Server Core에 대 한 자세한 내용은 참조 하세요. Windows Server의 Server Core 설치 옵션 이란?합니다.For more information on Server Core, see What is the Server Core installation option in Windows Server?.

사용자 권한 부여Authorize users

익명 액세스 구성 상태는 방식을 결정 합니다 [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 사이트를 익명 액세스를 허용 하지 않도록 구성 된 경우 요청에 하지 앱에 도달 합니다.If an IIS site is configured to disallow anonymous access, the request never reaches the 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] 특성을 사용 하면 앱의 인증을 요구 하는 끝점을 보호할 수 있습니다.The [Authorize] attribute allows you to secure endpoints of the app which require authentication. [AllowAnonymous] 재정의 특성의 [Authorize] 익명 액세스를 허용 하는 앱의 특성입니다.The [AllowAnonymous] attribute overrides the [Authorize] attribute in apps that allow anonymous access. 특성 사용 세부 정보를 참조 하세요. ASP.NET Core의 단순 권한 부여합니다.For attribute usage details, see ASP.NET Core의 단순 권한 부여.

참고

기본적으로 권한 부여를 페이지에 액세스할 수 없는 사용자는 빈 HTTP 403 응답으로 표시 됩니다.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.

가장Impersonation

Asp.net 가장을 구현 하지 않습니다.ASP.NET Core doesn't implement impersonation. 앱 풀 또는 프로세스 id를 사용 하 여 모든 요청에 대해 앱의 id를 사용 하 여 앱이 실행 됩니다.Apps run with the app's identity for all requests, using app pool or process identity. 앱 사용자를 대신 하 여 작업을 수행 해야 하는 경우 사용 하 여 WindowsIdentity.RunImpersonated터미널 인라인 미들웨어 에서 Startup.Configure합니다.If the app should perform an action on behalf of a user, use WindowsIdentity.RunImpersonated in a terminal inline middleware in Startup.Configure. 이 컨텍스트에서 단일 작업을 실행 하 고 컨텍스트를 닫습니다.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}\t" +
                $"State: {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 비동기 작업을 지원 하지 않으며 복잡 한 시나리오에 사용할 수 없습니다.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.

동안 합니다 Microsoft.AspNetCore.Authentication.Negotiate 패키지를 사용 하면 Windows에서 인증, Linux 및 macOS의 경우 가장은 Windows 에서만 지원 됩니다.While the Microsoft.AspNetCore.Authentication.Negotiate package enables authentication on Windows, Linux, and macOS, impersonation is only supported on Windows.

클레임 변환Claims transformations

IIS에서 프로세스 모드를 사용 하 여 호스팅하는 경우 AuthenticateAsync 사용자를 초기화 하기 위해 내부적으로 호출 되지 않습니다.When hosting with IIS in-process mode, AuthenticateAsync isn't called internally to initialize a user. 따라서 모든 인증 후에 클레임을 변환하는 데 사용되는 IClaimsTransformation 구현은 기본적으로 활성화되지 않습니다.Therefore, an IClaimsTransformation implementation used to transform claims after every authentication isn't activated by default. In process를 호스트 하는 경우 클레임 변환을 활성화 하는 코드 예제 및 자세한 내용은 참조 하세요. ASP.NET Core 모듈합니다.For more information and a code example that activates claims transformations when hosting in-process, see ASP.NET Core 모듈.

추가 자료Additional resources