Share via


방법: 서비스에서 클라이언트 가장

WCF(Windows Communication Foundation) 서비스에서 클라이언트 가장을 사용하면 서비스가 클라이언트를 대신하여 작업을 수행할 수 있습니다. 예를 들어, 시스템의 디렉터리 및 파일에 대한 액세스 또는 SQL Server 데이터베이스에 대한 액세스와 같이 ACL(액세스 제어 목록) 검사 관련 작업의 경우 ACL 검사는 클라이언트 사용자 계정에 대해 수행됩니다. 이 항목에서는 Windows 도메인의 클라이언트를 사용하여 클라이언트 가장 수준을 설정하는 데 필요한 기본적인 단계에 대해 설명합니다. 이와 관련된 작업 예제는 Impersonating the Client을 참조하십시오. 클라이언트 가장에 대한 자세한 내용은 위임 및 가장을 참조하세요.

참고 항목

클라이언트 및 서비스가 동일한 컴퓨터에서 실행 중이고 클라이언트가 시스템 계정( Local System 또는 Network Service)으로 실행 중인 경우, 상태 저장 보안 컨텍스트 토큰을 사용하여 보안 세션을 설정할 때 클라이언트를 가장할 수 없습니다. 일반적으로 WinForms 또는 콘솔 애플리케이션은 현재 계정에 로그인된 상태에서 실행되기 때문에 기본적으로 계정을 가장할 수 있습니다. 그러나 클라이언트가 ASP.NET 페이지이고 해당 페이지가 IIS 6.0 또는 IIS 7.0에서 호스트된 경우 클라이언트는 기본적으로 Network Service 계정으로 실행됩니다. 보안 세션을 지원하는 모든 시스템 제공 바인딩은 기본적으로 상태 비저장 보안 컨텍스트 토큰을 사용합니다. 그러나 클라이언트가 ASP.NET 페이지이고 상태 저장 보안 컨텍스트 토큰을 통한 보안 세션을 사용하는 경우, 클라이언트를 가장할 수 없습니다. 보안 세션에서 상태 저장 보안 컨텍스트 토큰 사용에 대한 자세한 내용은 방법: 보안 세션에 대한 보안 컨텍스트 토큰 만들기를 참조하세요.

서비스에서 캐시된 Windows 토큰에서 클라이언트 가장을 사용하려면

  1. 서비스를 만듭니다. 이 기본 프로시저에 대한 자습서는 Getting Started Tutorial를 참조하십시오.

  2. NetTcpBinding 또는 WSHttpBinding과 같이 Windows 인증을 사용하여 세션을 만드는 바인딩을 사용합니다.

  3. 서비스 인터페이스의 가장을 만드는 경우 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
    

클라이언트에서 허용된 가장 수준으로 설정하려면

  1. ServiceModel Metadata Utility Tool (Svcutil.exe)를 사용하여 서비스 클라이언트 코드를 만듭니다. 자세한 내용은 WCF 클라이언트를 사용하여 서비스 액세스를 참조하세요.

  2. WCF 클라이언트를 만든 후 WindowsClientCredential 클래스의 AllowedImpersonationLevel 속성을 TokenImpersonationLevel 열거형 값 중 하나로 설정합니다.

    참고 항목

    Delegation을 사용하려면 협상된 Kerberos 인증( multi-leg 또는 multi-step 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
    

참고 항목