익명 액세스를 사용하지 않고 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에서 전달한 자격 증명을 사용하여 데이터베이스에 연결하는 것입니다.
셰인 홀더
나는(). AuthenticationType WindowsIdentity.GetCurrent을 검토 추가하며 두 시나리오에 커버 로스입니다. 또한 자격 증명을 보낼 때 AllowImpersonationLevel을 위임으로 설정하여 위임 할 수 있다고 예상합니다. – ShaneH
Thread.CurrentPrincipal.Identity를 WindowsIdentity로 캐스팅하고 서버에서 ImpersonationLevel을 확인하십시오. –
두 경우 모두 가장 수준이 가장입니다. – ShaneH