다음을 통해 공유


Katana에서 Windows 인증 사용

이 문서에서는 Katana에서 Windows 인증을 사용하도록 설정하는 방법을 보여 줍니다. IIS를 사용하여 Katana를 호스트하고 HttpListener를 사용하여 사용자 지정 프로세스에서 Katana를 자체 호스트하는 두 가지 시나리오를 다룹니다. 이 문서를 검토해 주신 배리 도란스, 데이비드 매슨, 크리스 로스에게 감사드립니다.

Katana는 Microsoft의 OWIN 구현인 .NET용 오픈 웹 인터페이스입니다. OWIN 및 Katana에 대한 소개는 여기에서 확인할 수 있습니다. OWIN 아키텍처에는 다음과 같은 여러 계층이 있습니다.

  • 호스트: OWIN 파이프라인이 실행되는 프로세스를 관리합니다.
  • 서버: 네트워크 소켓을 열고 요청을 수신 대기합니다.
  • 미들웨어: HTTP 요청 및 응답을 처리합니다.

Katana는 현재 Windows 통합 인증을 지원하는 두 개의 서버를 제공합니다.

  • Microsoft.Owin.Host.SystemWeb. ASP.NET 파이프라인에서 IIS를 사용합니다.
  • Microsoft.Owin.Host.HttpListener. System.Net.HttpListener를 사용합니다. 이 서버는 현재 Katana를 자체 호스팅할 때 기본 옵션입니다.

참고

이 기능은 서버에서 이미 사용 가능하기 때문에 Katana는 현재 Windows 인증을 위한 OWIN 미들웨어를 제공하지 않습니다.

IIS의 Windows 인증

Microsoft.Owin.Host.SystemWeb을 사용하면 IIS에서 Windows 인증을 사용하도록 설정할 수 있습니다.

먼저 "ASP.NET 빈 웹 애플리케이션" 프로젝트 템플릿을 사용하여 새 ASP.NET 애플리케이션을 만들어 보겠습니다.

예제 그림

다음으로, NuGet 패키지를 추가합니다. 도구 메뉴에서 NuGet 패키지 관리자를 선택한 다음 패키지 관리자 콘솔을 선택합니다. 패키지 관리자 콘솔 창에서 다음 명령을 입력합니다.

Install-Package Microsoft.Owin.Host.SystemWeb -pre

이제 다음 코드를 사용하여 라는 Startup 클래스를 추가합니다.

using Owin;

namespace KatanaWebHost
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.Run(context =>
            {
                context.Response.ContentType = "text/plain";
                return context.Response.WriteAsync("Hello World!");
            });
        }
    }
}

이것이 바로 IIS에서 실행되는 OWIN용 "Hello world" 애플리케이션을 만드는 데 필요합니다. F5 키를 눌러 애플리케이션을 디버깅합니다. 브라우저 창에 "헬로 월드!"이 표시됩니다.

일러스트레이션 예제

다음으로, IIS Express Windows 인증을 사용하도록 설정합니다. 보기 메뉴에서 속성을 선택합니다. 솔루션 탐색기 프로젝트 이름을 클릭하여 프로젝트 속성을 봅니다.

속성 창에서 익명 인증사용 안 함으로 설정하고 Windows 인증사용으로 설정합니다.

인증 사용, 그림 예제

Visual Studio에서 애플리케이션을 실행하면 IIS Express 사용자의 Windows 자격 증명이 필요합니다. Fiddler 또는 다른 HTTP 디버깅 도구를 사용하여 이를 확인할 수 있습니다. 예제 HTTP 응답은 다음과 같습니다.

HTTP/1.1 401 Unauthorized
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/8.0
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
X-Powered-By: ASP.NET
Date: Sun, 28 Jul 2013 07:28:51 GMT
Content-Length: 6062
Proxy-Support: Session-Based-Authentication

이 응답의 WWW-Authenticate 헤더는 서버가 Kerberos 또는 NTLM을 사용하는 Negotiate 프로토콜을 지원함을 나타냅니다.

나중에 서버에 애플리케이션을 배포할 때 다음 단계에 따라 해당 서버의 IIS에서 Windows 인증을 사용하도록 설정합니다.

HttpListener의 Windows 인증

Microsoft.Owin.Host.HttpListener를 사용하여 Katana를 자체 호스트하는 경우 HttpListener instance 직접 Windows 인증을 사용하도록 설정할 수 있습니다.

먼저 새 콘솔 애플리케이션을 만듭니다. 다음으로, NuGet 패키지를 추가합니다. 도구 메뉴에서 NuGet 패키지 관리자를 선택한 다음 패키지 관리자 콘솔을 선택합니다. 패키지 관리자 콘솔 창에서 다음 명령을 입력합니다.

Install-Package Microsoft.Owin.SelfHost -Pre

이제 다음 코드를 사용하여 라는 Startup 클래스를 추가합니다.

using Owin;
using System.Net;

namespace KatanaSelfHost
{
    class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            HttpListener listener = 
                (HttpListener)app.Properties["System.Net.HttpListener"];
            listener.AuthenticationSchemes = 
                AuthenticationSchemes.IntegratedWindowsAuthentication;

            app.Run(context =>
            {
                context.Response.ContentType = "text/plain";
                return context.Response.WriteAsync("Hello World!");
            });
        }
    }
}

이 클래스는 이전과 동일한 "Hello world" 예제를 구현하지만 Windows 인증도 인증 체계로 설정합니다.

함수 내에서 Main OWIN 파이프라인을 시작합니다.

using Microsoft.Owin.Hosting;
using System;

namespace KatanaSelfHost
{
    class Program
    {
        static void Main(string[] args)
        {
            using (WebApp.Start<Startup>("http://localhost:9000"))
            {
                Console.WriteLine("Press Enter to quit.");
                Console.ReadKey();
            }        
        }
    }
}

Fiddler에서 요청을 보내 애플리케이션이 Windows 인증을 사용하고 있는지 확인할 수 있습니다.

HTTP/1.1 401 Unauthorized
Content-Length: 0
Server: Microsoft-HTTPAPI/2.0
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
Date: Sun, 28 Jul 2013 21:02:21 GMT
Proxy-Support: Session-Based-Authentication

프로젝트 Katana 개요

System.Net.HttpListener

MVC 5에서 OWIN Forms 인증 이해