2011-02-15 4 views
0

웹 서비스에서 클라이언트로 가장하는 것이 장단점은 무엇입니까? 감사의 장점 중 하나는 응용 프로그램에서 웹 서비스로 ID 개체를 전달하는 것보다 가장을 사용하여 감사를 더 잘 수행 할 수 있다는 것입니다.클라이언트가 웹 서비스에서 가장?

답변

2

가장의 목적은 서비스의 액세스를 제한없는 리소스로 확장하는 것입니다. 이는 요청자의 권리를 고려하여 수행합니다. 가장은 서비스가 특정 자원에 대한 액세스가 허용되어야하는지 여부를 판별해야 할 때 요청자의 보안 컨텍스트를 가정 할 수있게합니다.

가장을 구현하는 가장 간단한 방법은 서비스의 메서드에 선언적으로 적용하는 것입니다. OperationBehavior 특성에는 가장이라는 속성이 포함되어 있습니다. 이 등록 정보는 필수 또는 허용으로 설정할 수 있습니다.

[OperationBehavior(Impersonation = ImpersonationOption.Allowed)] 
public bool Update() 
{ 
return true; 
} 

가장 특성을 허용으로 설정하면 클라이언트 자격 증명이 서비스로 전달 될 수 있습니다. 가장이 필수로 설정된 경우 서비스는 클라이언트의 자격 증명을 가정해야합니다.

모든 메소드가 가장을 필요로하는 경우가 있습니다. 예를 들어, 파일이 액세스되는 경우에만 가장 (impersonation)이 필요할 수 있습니다. 이를 위해 WindowsImpersonationContext 클래스를 사용하여 imersonatively impersonation을 구현할 수 있습니다.

시작하려면 현재 요청과 연결된 Windows ID를 검색해야합니다. 이것은 ServiceSecurityContext.Current 객체를 통해 사용할 수 있습니다. WindowsIdentity 속성이 null이 아닌 경우 (가장을 위해 Windows ID가 필요함을 기억하십시오), ID에 대해 가장 메서드를 호출 할 수 있습니다. 다음 코드는이 기술을 보여줍니다.

WindowsIdentity callerIdentity = 
    ServiceSecurityContext.Current.WindowsIdentity; 
    if (callerIdentity == null) 
    throw new InvalidOperationException(
    "The caller cannot be mapped to a WindowsIdentity"); 
    using (WindowsImpersonationContext context = callerIdentity.Impersonate()) 
    { 
     // Access a file as the caller. 
    } 

두 가지 가장 기법은 방법별로 작동합니다. 또한 서비스의 모든 메소드에 가장 (impersonation)을 사용 가능하게 할 수 있습니다. ServiceAuthorization 동작의 ImpersonateCallerForAllOperations 속성을 true로 설정하면됩니다. 다음 코드 샘플과 같이이 작업을 수행 할 수 있습니다.

ServiceHost serviceHost = new ServiceHost(typeof(TestService)); 
ServiceAuthorizationBehavior behavior = 
serviceHost.Description.Behaviors.Find<ServiceAuthorizationBehavior>(); 
behavior.ImpersonateCallerForAllOperations = true; 
+0

장점/단점 ?? – WhoIsNinja

+0

단점 : 가장이 발생하려면 요청에 WindowsIdentity가 있어야합니다. Windows Identity가 없으면 서비스의 권한을 확장 할 수 없습니다. 그게 내가 불리한 점을 생각할 수있는 전부 야! 나는 대답에서 말한 것이 대부분의 이점을 다룰 것이라고 생각한다. –

관련 문제