Windows 인증 <windowsAuthentication>

개요

요소는 <windowsAuthentication> IIS(인터넷 정보 서비스) 7 Windows 인증 모듈에 대한 구성 설정을 정의합니다. IIS 7 서버가 Microsoft Active Directory 서비스 도메인 ID 또는 다른 Windows 계정을 사용하여 사용자를 식별하는 회사 네트워크에서 실행되는 경우 Windows 인증 사용할 수 있습니다. 이 때문에 서버가 Active Directory 도메인의 구성원인지 여부에 관계없이 Windows 인증 사용할 수 있습니다.

Windows 인증(이전 이름은 NTLM이고 Windows NT 챌린지/응답 인증이라고도 함)은 네트워크를 통해 전송되기 전에 사용자 이름과 암호가 해시되기 때문에 안전한 인증 형식입니다. Windows 인증 사용하도록 설정하면 클라이언트 브라우저는 웹 서버와의 암호화 교환에서 강력한 해시된 버전의 암호를 보냅니다.

Windows 인증 요소에 정의된 두 개의 인증 프로토콜인 Kerberos 및 NTLM을 <providers> 지원합니다. IIS 7에서 Windows 인증 설치하고 사용하도록 설정하는 경우 기본 프로토콜은 Kerberos입니다. 또한 요소는 <windowsAuthentication> Windows Server 2008에 새로운 커널 모드 인증 기능을 사용할지 여부를 구성하는 useKernelMode 특성을 포함할 수 있습니다.

Windows 인증 다음과 같은 이유로 인트라넷 환경에 가장 적합합니다.

  • 클라이언트 컴퓨터와 웹 서버는 동일한 도메인에 있습니다.
  • 관리자는 모든 클라이언트 브라우저가 인터넷 Explorer 2.0 이상인지 확인할 수 있습니다.
  • NTLM에서 지원되지 않는 HTTP 프록시 연결은 필요하지 않습니다.
  • Kerberos 버전 5에는 인터넷 환경에서는 불가능한 Active Directory에 대한 연결이 필요합니다.

IIS 7.5의 새로운 기능

요소는 <extendedProtection> IIS 7.5에서 도입되었으며, 이를 통해 Windows 인증 통합된 새로운 확장 보호 기능에 대한 설정을 구성할 수 있습니다.

호환성

버전 참고
IIS 10.0 <windowsAuthentication> 요소가 IIS 10.0에서 수정되지 않았습니다.
IIS 8.5 <windowsAuthentication> 요소가 IIS 8.5에서 수정되지 않았습니다.
IIS 8.0 <windowsAuthentication> 요소가 IIS 8.0에서 수정되지 않았습니다.
IIS 7.5 <extendedProtection> 요소가 IIS 7.5에 추가되었습니다.
IIS 7.0 요소는 <windowsAuthentication> IIS 7.0에서 도입되었습니다.
IIS 6.0 요소는 <windowsAuthentication> IIS 6.0 AuthTypeAuthFlags 메타베이스 속성의 일부를 대체합니다.

설치 프로그램

IIS 7 이상의 기본 설치에는 Windows 인증 역할 서비스가 포함되지 않습니다. IIS에서 Windows 인증 사용하려면 역할 서비스를 설치하고 웹 사이트 또는 애플리케이션에 대해 익명 인증을 사용하지 않도록 설정한 다음 사이트 또는 애플리케이션에 Windows 인증 사용하도록 설정해야 합니다.

참고

역할 서비스를 설치한 후 IIS 7은 다음 구성 설정을 ApplicationHost.config 파일에 커밋합니다.

<windowsAuthentication enabled="false" />

Windows Server 2012 또는 Windows Server 2012 R2

  1. 작업 표시줄에서 서버 관리자를 클릭합니다.
  2. 서버 관리자관리 메뉴를 클릭한 다음 역할 및 기능 추가를 클릭합니다.
  3. 역할 및 기능 추가 마법사에서 다음을 클릭합니다. 설치 유형을 선택하고 다음을 클릭합니다. 대상 서버를 선택하고 다음을 클릭합니다.
  4. 서버 역할 페이지에서 웹 서버(IIS)를 확장하고, 웹 서버를 확장하고, 보안을 확장한 다음, Windows 인증을 선택합니다. 다음을 클릭합니다.
    Windows 인증 옵션이 강조 표시된 서버 역할 페이지의 스크린샷. .
  5. 기능 선택 페이지에서 다음을 클릭합니다.
  6. 설치 선택 확인 페이지에서 설치를 클릭합니다.
  7. Results(결과) 페이지에서 Close(닫기)를 클릭합니다.

Windows 8 또는 Windows 8.1

  1. 시작 화면에서 포인터를 왼쪽 아래 모서리로 이동하고 시작 단추를 마우스 오른쪽 단추로 클릭한 다음 제어판 클릭합니다.
  2. 제어판프로그램 및 기능을 클릭한 다음 Windows 기능 켜기 또는 끄기를 클릭합니다.
  3. 인터넷 정보 서비스를 확장하고 World Wide Web Services를 확장한 다음 보안을 확장한 다음 Windows 인증을 선택합니다.
    Windows 인증 폴더가 강조 표시된 Internet Information Services 폴더의 포함된 폴더 스크린샷
  4. 확인을 클릭합니다.
  5. 닫기를 클릭합니다.

Windows Server 2008 또는 Windows Server 2008 R2

  1. 작업 표시줄에서 시작을 클릭하고 관리 도구를 가리킨 다음 서버 관리자 클릭합니다.
  2. 서버 관리자 계층 창에서 역할을 확장한 다음 웹 서버(IIS)를 클릭합니다.
  3. 웹 서버(IIS) 창에서 역할 서비스 섹션으로 스크롤한 다음 역할 서비스 추가를 클릭합니다.
  4. 역할 서비스 추가 마법사역할 서비스 선택 페이지에서 Windows 인증을 선택하고 다음을 클릭합니다.
    Windows 인증 옵션이 강조 표시된 역할 서비스 선택 페이지의 스크린샷
  5. 설치 선택 확인 페이지에서 설치를 클릭합니다.
  6. Results(결과) 페이지에서 Close(닫기)를 클릭합니다.

Windows Vista 또는 Windows 7

  1. 작업 표시줄에서 시작을 클릭한 다음 제어판 클릭합니다.
  2. 제어판프로그램 및 기능을 클릭한 다음 Windows 기능 켜기 또는 끄기를 클릭합니다.
  3. 인터넷 정보 서비스, World Wide Web Services, 보안을 차례로 확장합니다.
  4. Windows 인증을 선택한 다음 확인을 클릭합니다.
    Windows 인증 폴더가 강조 표시된 확장 가능한 인터넷 정보 서비스 폴더의 스크린샷

방법

웹 사이트, 웹 애플리케이션 또는 웹 서비스에 Windows 인증 사용하도록 설정하는 방법

  1. IIS(인터넷 정보 서비스) 관리자를 엽니다.

    • Windows Server 2012 또는 Windows Server 2012 R2를 사용하는 경우:

      • 작업 표시줄에서 서버 관리자 클릭하고 도구를 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 클릭합니다.
    • Windows 8 또는 Windows 8.1 사용하는 경우:

      • Windows 키를 누른 채로 문자 X를 누른 다음 제어판 클릭합니다.
      • 관리 도구를 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
    • Windows Server 2008 또는 Windows Server 2008 R2를 사용하는 경우:

      • 작업 표시줄에서 시작을 클릭하고 관리 도구를 가리킨 다음 IIS(인터넷 정보 서비스) 관리자를 클릭합니다.
    • Windows Vista 또는 Windows 7을 사용하는 경우:

      • 작업 표시줄에서 시작을 클릭한 다음 제어판 클릭합니다.
      • 관리 도구를 두 번 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
  2. 연결 창에서 서버 이름을 확장하고 사이트를 확장한 다음 Windows 인증 사용하도록 설정할 사이트, 애플리케이션 또는 웹 서비스를 확장합니다.

  3. 창에서 보안 섹션으로 스크롤한 다음 인증을 두 번 클릭합니다.

  4. 인증 창에서 Windows 인증을 선택한 다음 작업 창에서사용을 클릭합니다.
    이름 및 상태 필드가 포함된 인증 창의 스크린샷


Windows 인증 확장 보호를 사용하도록 설정하는 방법

  1. IIS(인터넷 정보 서비스) 관리자를 엽니다.

    • Windows Server 2012 또는 Windows Server 2012 R2를 사용하는 경우:

      • 작업 표시줄에서 서버 관리자 클릭하고 도구를 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 클릭합니다.
    • Windows 8 또는 Windows 8.1 사용하는 경우:

      • Windows 키를 누른 채로 문자 X를 누른 다음 제어판 클릭합니다.
      • 관리 도구를 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
    • Windows Server 2008 또는 Windows Server 2008 R2를 사용하는 경우:

      • 작업 표시줄에서 시작을 클릭하고 관리 도구를 가리킨 다음 IIS(인터넷 정보 서비스) 관리자를 클릭합니다.
    • Windows Vista 또는 Windows 7을 사용하는 경우:

      • 작업 표시줄에서 시작을 클릭한 다음 제어판 클릭합니다.
      • 관리 도구를 두 번 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
  2. 연결 창에서 서버 이름을 확장하고 사이트를 확장한 다음 Windows 인증 확장 보호를 사용하도록 설정할 사이트, 애플리케이션 또는 웹 서비스를 확장합니다.

  3. 창에서 보안 섹션으로 스크롤한 다음 인증을 두 번 클릭합니다.

  4. 인증 창에서 Windows 인증을 선택합니다.

  5. 작업 창에서 사용을 클릭합니다.
    인증 창 및 그룹화 기준 필드의 스크린샷

  6. 작업 창에서 고급 설정을 클릭합니다.

  7. 고급 설정 대화 상자가 나타나면 확장된 보호 드롭다운 메뉴에서 다음 옵션 중 하나를 선택합니다.

    • 확장된 보호를 지원하지 않는 클라이언트에 대해 하위 수준 지원을 제공하면서 확장된 보호를 사용하도록 설정하려면 수락 을 선택합니다.
    • 하위 수준 지원을 제공하지 않고 확장된 보호를 사용하도록 설정하려면 필수 를 선택합니다.
      확장된 보호 필드의 수락 옵션이 강조 표시된 고급 설정 대화 상자의 스크린샷
  8. 확인 을 클릭하여 고급 설정 대화 상자를 닫습니다.

Configuration

요소는 <windowsAuthentication> ApplicationHost.config 파일의 사이트, 애플리케이션 또는 가상 디렉터리 수준에서 구성할 수 있습니다.

특성

attribute Description
authPersistNonNTLM 선택적 부울 특성입니다.

IIS가 NTLM이 아닌 모든 요청(예: Kerberos)을 자동으로 다시 인증할지 여부(예: 동일한 연결에 있는 요청)를 자동으로 다시 인증할지 여부를 지정합니다. False 이면 동일한 연결에 대해 여러 인증을 사용할 수 있습니다.

참고:true 로 설정하면 클라이언트가 동일한 연결에서 한 번만 인증됩니다. IIS는 설정된 상태로 유지되는 TCP 세션에 대한 토큰 또는 티켓을 서버에서 캐시합니다.

기본값은 false입니다.
authPersistSingleRequest 선택적 부울 특성입니다.

이 플래그를 true 로 설정하면 연결에 대한 단일 요청에 대해서만 인증이 유지됩니다. IIS는 각 요청이 끝날 때 인증을 다시 시작하고 세션의 다음 요청에 대해 다시 인증을 강제로 수행합니다.

기본값은 false입니다.
enabled 필수 부울 특성입니다.

Windows 인증 사용할 수 있는지 여부를 지정합니다.

기본값은 false입니다.
useKernelMode 선택적 부울 특성입니다.

커널 모드에서 Windows 인증 수행되는지 여부를 지정합니다. True이면 Windows 인증 커널 모드를 사용합니다.

커널 모드 인증은 인증 성능을 향상시키고 사용자 지정 ID를 사용하도록 구성된 애플리케이션 풀의 인증 문제를 방지할 수 있습니다.

Kerberos 인증을 사용하며 애플리케이션 풀에 사용자 지정 ID가 있는 경우에는 이 설정을 사용하도록 설정하는 것이 좋습니다.

기본값은 true입니다.

자식 요소

요소 Description
extendedProtection 선택적 요소입니다.

Windows 인증 대한 확장된 보호 옵션을 지정합니다.

참고: 이 요소는 IIS 7.5에 추가되었습니다.
providers 선택적 요소입니다.

Windows 인증 사용되는 보안 지원 공급자를 지정합니다.

구성 샘플

다음 기본 <windowsAuthentication> 요소는 IIS 7.0의 루트 ApplicationHost.config 파일에서 구성되며 기본적으로 Windows 인증 사용하지 않도록 설정합니다. 또한 IIS 7.0에 대한 두 Windows 인증 공급자를 정의합니다.

<windowsAuthentication enabled="false">
   <providers>
      <add value="Negotiate" />
      <add value="NTLM" />
   </providers>
</windowsAuthentication>

다음 예제에서는 Windows 인증 사용하도록 설정하고 Contoso라는 웹 사이트에 대해 익명 인증을 사용하지 않도록 설정합니다.

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

샘플 코드

다음 예제에서는 Contoso라는 사이트에 대해 익명 인증을 사용하지 않도록 설정한 다음 사이트에 대해 Windows 인증 사용하도록 설정합니다.

AppCmd.exe

appcmd.exe set config "Contoso" -section:system.webServer/security/authentication/anonymousAuthentication /enabled:"False" /commit:apphost

appcmd.exe set config "Contoso" -section:system.webServer/security/authentication/windowsAuthentication /enabled:"True" /commit:apphost

참고

AppCmd.exe 사용하여 이러한 설정을 구성할 때 commit 매개 변수 apphost 를 로 설정해야 합니다. 그러면 구성 설정이 ApplicationHost.config 파일의 적절한 위치 섹션에 커밋됩니다.

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample {

   private static void Main() {

      using(ServerManager serverManager = new ServerManager()) { 
         Configuration config = serverManager.GetApplicationHostConfiguration();

         ConfigurationSection anonymousAuthenticationSection = config.GetSection("system.webServer/security/authentication/anonymousAuthentication", "Contoso");
         anonymousAuthenticationSection["enabled"] = false;

         ConfigurationSection windowsAuthenticationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", "Contoso");
         windowsAuthenticationSection["enabled"] = true;

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample
   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration

      Dim anonymousAuthenticationSection As ConfigurationSection = config.GetSection("system.webServer/security/authentication/anonymousAuthentication", "Contoso")
      anonymousAuthenticationSection("enabled") = False

      Dim windowsAuthenticationSection As ConfigurationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", "Contoso")
      windowsAuthenticationSection("enabled") = True

      serverManager.CommitChanges()
   End Sub
End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";

var anonymousAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/anonymousAuthentication", "MACHINE/WEBROOT/APPHOST/Contoso");
anonymousAuthenticationSection.Properties.Item("enabled").Value = false;

var windowsAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/windowsAuthentication", "MACHINE/WEBROOT/APPHOST/Contoso");
windowsAuthenticationSection.Properties.Item("enabled").Value = true;

adminManager.CommitChanges();

VBScript

Set adminManager = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set anonymousAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/anonymousAuthentication", "MACHINE/WEBROOT/APPHOST/Contoso")
anonymousAuthenticationSection.Properties.Item("enabled").Value = False

Set windowsAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/windowsAuthentication", "MACHINE/WEBROOT/APPHOST/Contoso")
windowsAuthenticationSection.Properties.Item("enabled").Value = True

adminManager.CommitChanges()