ASP.NET 가장

업데이트: 2007년 11월

가장을 사용하면 ASP.NET 응용 프로그램은 요청하는 사용자의 Windows ID(사용자 계정)를 사용하여 실행될 수 있습니다. 일반적으로 가장은 Microsoft IIS(인터넷 정보 서비스)를 통해 사용자를 인증하는 응용 프로그램에서 사용됩니다.

ASP.NET 가장은 기본적으로 비활성화되어 있습니다. ASP.NET 응용 프로그램에 대해 가장이 활성화된 경우 이 응용 프로그램은 IIS가 ASP.NET으로 전달하는 액세스 토큰에 따라 해당 ID의 컨텍스트로 실행됩니다. 이 토큰은 로그인한 Windows 사용자에 대한 토큰과 같은 인증된 사용자 토큰이거나 익명 사용자에 대해 IIS가 제공하는 토큰(일반적으로 IUSR_MACHINENAME ID)일 수 있습니다.

가장을 활성화하면 사용자 응용 프로그램 코드만 가장된 사용자의 컨텍스트로 실행됩니다. ASP.NET 프로세스 ID를 사용하여 응용 프로그램이 컴파일되고 구성 정보가 로드됩니다. 자세한 내용은 ASP.NET 프로세스 ID 구성을 참조하십시오. 컴파일된 응용 프로그램은 Temporary ASP.NET files 디렉터리에 저장됩니다. 가장되는 응용 프로그램 ID에는 이 디렉터리에 대한 읽기/쓰기 권한이 있어야 하며 응용 프로그램 디렉터리 및 하위 디렉터리에 있는 파일에 대해서도 최소 읽기 권한이 있어야 합니다. 자세한 내용은 ASP.NET 필수 ACL(액세스 제어 목록)을 참조하십시오.

참고:

ASP.NET에서 응용 프로그램을 컴파일하고 구성 정보를 로드할 때 ASP.NET 프로세스의 Windows ID를 사용하기 때문에 여러 응용 프로그램을 호스팅하는 서버에서는 응용 프로그램 코드와 구성 정보를 응용 프로그램 간에 비공개로 유지해야 합니다. Windows Server 2003에서는 여러 개의 응용 프로그램 풀을 만든 다음 각 응용 프로그램 풀에 고유 ID를 지정할 수 있습니다. 파일 시스템이 NTFS로 포맷된 경우 ACL(액세스 제어 목록)과 이러한 ID를 사용하여 응용 프로그램 파일에 대한 액세스를 제한할 수 있습니다. 예를 들어, App1과 App2라는 두 개의 응용 프로그램이 있으며 각 응용 프로그램의 정보를 비공개로 유지해야 한다고 가정해 보십시오. ID가 ID_ApplicationPool1인 ApplicationPool1 응용 프로그램 풀에 App1을 배치하고 ID가 ID_ApplicationPool2인 ApplicationPool2 응용 프로그램 풀에 App2를 배치할 수 있습니다. ID_ApplicationPool1 계정에 App1의 파일에 대한 액세스를 부여하지만 App2의 파일에 대한 액세스는 거부합니다. ID_ApplicationPool2에는 App2의 파일에 대한 액세스를 부여하지만 App1의 파일에 대한 액세스는 거부합니다. Windows 2000 또는 Windows XP Professional 운영 체제에서는 모든 ASP.NET 응용 프로그램의 프로세스 ID가 단일 ID이기 때문에 이렇게 구분할 수 없습니다.

identity 구성 요소를 사용하여 가장을 제어합니다. 다른 구성 지시문에서처럼 이 지시문도 계층적으로 적용됩니다. 응용 프로그램의 가장을 활성화하는 최소 구성 파일은 다음 예제와 같이 표시됩니다.

<configuration>
  <system.web>
    <identity impersonate="true"/>
  </system.web>
</configuration>

다음 예제와 같이 특정 이름을 구성 가능한 ID로 사용하여 응용 프로그램을 실행하도록 지원할 수도 있습니다.

<identity impersonate="true" 
  userName="contoso\Jane" 
  password="********" />

이전 예제에 나와 있는 값 대신 올바른 암호를 사용합니다.

참고:

앞의 예제에서 사용자 이름과 암호는 구성 파일에 일반 텍스트로 저장됩니다. 응용 프로그램의 보안을 강화하려면 ACL(액세스 제어 목록)을 사용하여 Web.config 파일에 대한 액세스를 제한하고 보호되는 구성을 사용하여 Web.config 파일의 identity 구성 요소를 암호화하는 것이 좋습니다. 자세한 내용은 보호되는 구성을 사용하여 구성 정보 암호화를 참조하십시오.

이 예제에서 설명하는 구성을 사용하면 요청의 ID에 관계없이 전체 응용 프로그램을 contoso\Jane ID로 실행할 수 있습니다. 이 가장 형식은 다른 컴퓨터로 위임할 수 있습니다. 즉, 가장된 사용자의 사용자 이름과 암호를 지정하면 네트워크상의 다른 컴퓨터에 연결한 다음 통합 보안을 사용하여 파일이나 SQL Server 액세스와 같은 리소스를 요청할 수 있습니다. 가장을 사용하도록 설정하고 ID로 도메인 계정을 지정하지 않으면 IIS 응용 프로그램이 기본 인증을 사용하도록 구성되어 있지 않은 경우 네트워크상의 다른 컴퓨터에 연결할 수 없습니다.

참고:

Windows 2000에서는 ASP.NET 작업자 프로세스의 ID로 특정 사용자 자격 증명을 사용하여 가장할 수 없습니다. 그러나 특정 사용자 자격 증명 없이 가장을 사용하도록 설정하여 응용 프로그램이 IIS에서 결정된 ID를 가장하도록 할 수 있습니다. 자세한 내용은 Microsoft 기술 자료(https://support.microsoft.com)에서 문서 810204 "PRB: Windows 2000에서 ASP.NET의 요청별 가장이 작동하지 않음"을 참조하십시오.

가장된 ID 읽기

다음 코드 예제에서는 가장된 사용자의 ID를 프로그래밍 방식으로 읽는 방법을 보여 줍니다.

Dim username As String = _
    System.Security.Principal.WindowsIdentity.GetCurrent().Name
String username = 
    System.Security.Principal.WindowsIdentity.GetCurrent().Name;

참고 항목

기타 리소스

ASP.NET 웹 응용 프로그램 보안