WCF(Windows Communication Foundation) 서비스에서 클라이언트를 가장하면 서비스가 클라이언트를 대신하여 작업을 수행할 수 있습니다. 컴퓨터의 디렉터리 및 파일에 대한 액세스 또는 SQL Server 데이터베이스에 대한 액세스와 같은 ACL(액세스 제어 목록) 검사가 적용되는 작업의 경우 ACL 검사는 클라이언트 사용자 계정에 대한 것입니다. 이 주제에서는 Windows 도메인에서 클라이언트가 클라이언트 가장 수준을 설정할 수 있도록 클라이언트를 활성화하는 데 필요한 기본 단계를 설명합니다. 이에 대한 작업 예제는 클라이언트 가장하기를 참고하십시오. 클라이언트 대리 실행에 대한 자세한 내용은 위임 및 대리 실행을 참조하세요.
메모
클라이언트와 서비스가 동일한 컴퓨터에서 실행 중이고 클라이언트가 시스템 계정(즉, Local System 또는 Network Service)으로 실행 중인 경우 상태 저장 보안 컨텍스트 토큰을 사용하여 보안 세션을 설정할 때 클라이언트를 가장할 수 없습니다. WinForms 또는 콘솔 애플리케이션은 일반적으로 현재 로그인한 계정에서 실행되므로 기본적으로 계정을 가장할 수 있습니다. 그러나 클라이언트가 ASP.NET 페이지이고 해당 페이지가 IIS 6.0 또는 IIS 7.0에서 호스트되는 경우 클라이언트는 기본적으로 계정에서 Network Service 실행됩니다. 보안 세션을 지원하는 모든 시스템 제공 바인딩은 기본적으로 무상태 보안 컨텍스트 토큰을 사용합니다. 그러나 클라이언트가 ASP.NET 페이지이고 상태 저장 보안 컨텍스트 토큰이 있는 보안 세션을 사용하는 경우 클라이언트를 가장할 수 없습니다. 보안 세션에서 상태 저장 보안 컨텍스트 토큰을 사용하는 방법에 대한 자세한 내용은 방법: 보안 세션에 대한 보안 컨텍스트 토큰 만들기를 참조하세요.
서비스에서 캐시된 Windows 토큰에서 클라이언트를 가장할 수 있도록 설정하려면
서비스를 만듭니다. 이 기본 절차의 자습서는 시작 자습서를 참조하세요.
Windows 인증을 사용하고 세션을 만드는 바인딩을 사용합니다. 예를 들어 NetTcpBinding 또는 WSHttpBinding과 같은 바인딩을 사용할 수 있습니다.
서비스 인터페이스의 구현을 만들 때, 클라이언트 가장이 필요한 메서드에 OperationBehaviorAttribute 클래스를 적용합니다. Impersonation 속성을 Required로 설정합니다.
[OperationBehavior(Impersonation=ImpersonationOption.Required)] public double Add(double a, double b) { return a + b; }<OperationBehavior(Impersonation:=ImpersonationOption.Required)> _ Public Function Add(ByVal a As Double, ByVal b As Double) As Double _ Implements ICalculator.Add Return a + b End Function
클라이언트에서 허용되는 대리 수준을 설정하려면
ServiceModel 메타데이터 유틸리티 도구(Svcutil.exe)를 사용하여 서비스 클라이언트 코드를 만듭니다. 자세한 내용은 WCF 클라이언트를 사용하여 서비스에 액세스하는 것을 참조하세요.
WCF 클라이언트를 만든 후 클래스의 AllowedImpersonationLevel 속성을 열거형 값 중 WindowsClientCredential 하나로 설정합니다TokenImpersonationLevel.
메모
Delegation를 사용하려면 협상된 Kerberos 인증(다중 단계 또는 다단계 Kerberos라고도 함)을 사용해야 합니다. 이를 구현하는 방법에 대한 설명은 보안 모범 사례를 참조하세요.
CalculatorClient client = new CalculatorClient("CalculatorEndpoint"); client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;Dim client As New CalculatorClient("CalculatorEndpoint") client.ClientCredentials.Windows.AllowedImpersonationLevel = _ System.Security.Principal.TokenImpersonationLevel.Impersonation