2009-03-26 3 views
2

익명 액세스를 사용하지 않고 Windows 인증을 사용하는 통합 모드의 기본 응용 프로그램 풀에서 IIS 7에서 호스팅되는 WCF 서비스가 있습니다.WCF : NetworkCredential과 가장 간의 관계

내 인터페이스의 메소드 구현에 다음 속성을 추가했습니다. 내 서비스에 대한 호출에 네트워크 자격 증명을 제공하지 않으면

[OperationBehavior(Impersonation = ImpersonationOption.Required)] 

나는 점에서 예상 된 동작을 얻을 다음 해당 :

ServiceSecurityContext.Current.WindowsIdentity.Name = MYDOMAIN 참고 MyUser
ServiceSecurityContext \ .Current.PrimaryIdentity.Name = myDomain \ myUser
Thread.CurrentPrincipal.Identity.Name = myDomain \ myUser
SSPI 및 myDomain \ myUser 인증을 사용하여 원격 시스템의 데이터베이스에 연결할 수 있습니다.
WindowsIdentity.GetCurrent(). Name = myDomain \ myUser
Thread.CurrentPrincipal.IsInRole()을 사용하여 사용자가 역할에 있는지 확인할 수 있습니다.
WindowsIdentity.GetCurrent(). Groups를 사용하여 사용자의 그룹 목록을 검색 할 수 있습니다. 나는 다음을 사용하여 네트워크 자격 증명을 제공 할 경우

는하지만 :

var networkCredential = new NetworkCredential(user, pwd, dom); 
base.ClientCredentials.Windows.ClientCredential = networkCredential; 
base.ClientCredentials.Windows.AllowNtlm = true;  
base.ClientCredentials.Windows.AllowedImpersonationLevel 
      = System.Security.Principal.TokenImpersonationLevel.Delegation; 

을 그리고 위의 모든 상장 그룹의 두 개의 다른 데이터베이스 연결을 제외하고 동일합니다. 데이터베이스에 대한 연결은 NT Authority \ Anonymous 로그인 사용자를 사용하여 수행됩니다. NetworkCredentials를 사용하면 NT Authority \ Interactive가 아닌 NT Authority \ Network 그룹에 사용자가 추가되고 LOCAL 그룹이 제거됩니다.

내 목표는 NetworkCredential에서 전달한 자격 증명을 사용하여 데이터베이스에 연결하는 것입니다.

셰인 홀더

답변

0

일반적인 이중 홉 문제와 비슷하게 들립니다.

Kerberos가 기본적으로 사용되는 작업 시나리오에서 원격 서버의 위임 토큰을 얻을 것이라고 추측합니다.

두 번째 시나리오에서는 제공된 사용자/패스로 인해 Kerberos를 사용하지 않고 위임 토큰을받을 수 없습니다.

내가 아는 원격 서버에서 위임 토큰을 얻는 다른 방법은 기본 인증 (SSL 사용)을 사용하는 것입니다.

Concerning the credentials double hop issue

+0

나는(). AuthenticationType WindowsIdentity.GetCurrent을 검토 추가하며 두 시나리오에 커버 로스입니다. 또한 자격 증명을 보낼 때 AllowImpersonationLevel을 위임으로 설정하여 위임 할 수 있다고 예상합니다. – ShaneH

+0

Thread.CurrentPrincipal.Identity를 WindowsIdentity로 캐스팅하고 서버에서 ImpersonationLevel을 확인하십시오. –

+0

두 경우 모두 가장 수준이 가장입니다. – ShaneH