저는 더블 홉 시나리오에서 위임을 요구하는 프로젝트 작업을하고 있습니다. NetBcp 바인딩을 사용하는 WCF 서비스에 연결하여 다른 서버의 SQL 데이터베이스에 연결하는 데스크톱 클라이언트가 있습니다. 우리의 목표는 사용자의 자격 증명을 사용하여 SQL 데이터베이스에 액세스하는 것입니다. WCF의 위임이 작동하지 않습니다. - 첫 번째 홉은 NTLM입니까?
WCF 서비스 및 SQL 데이터베이스 모두
위임은 SQL 데이터베이스를 사용할 수있는 동일한 도메인 사용자에서 실행된다. 지침 here을 준수했지만 아무런 성과가 없습니다.로그에 기록 된 세부 정보 : SQL 데이터베이스에서 사용되는 로그인은 WCF 서비스가 실행중인 사용자로 표시되며 Kerberos를 사용합니다. WCF 서버에서 사용되는 로그인은 클라이언트의 사용자로 나타나지만 NTLM을 사용합니다. [OperationBehavior(Impersonation = ImpersonationOption.Allowed)]
또는 using (ServiceSecurityContext.Current.WindowsIdentity.Impersonate())
을 사용하면 명령이 클라이언트로 WCF 서버에서 실행됩니다. 이것은 내가 가장이 잘 작동하고 있다고 믿게합니다.
따라서 첫 번째 홉이 NTLM으로 되돌아 갈 수있는 원인은 무엇입니까? 우리는 그것이 SPN 문제라고 생각하지만 WCF 서비스와 SQL 서비스의 SPN을 공유 도메인 사용자에게 등록했습니다. 또한 위에 나열된 지침에 따라 도메인 사용자 위임에 대해 SQL 서비스를 신뢰할 수있는 것으로 설정했습니다.
우리는 SPN을 설정 WCF 서비스에 EndpointIdentity.CreateSpnIdentity
를 사용했습니다, 이것은 우리가 도메인 사용자에 등록 한 SPN입니다.
제안 사항? 미리 감사드립니다!
편집 : 우리는 클라이언트에서 EndpointIdentity.CreateSpnIdentity
을 사용하지 않았습니다. 이 값을 설정 한 후 "target principle name is incorrect"내부 예외가있는 "SSPI 호출 실패"오류가 나타납니다. 그러나 클라이언트와 서버에서 설정 한 SPN이 일치하며 둘 다 서비스의 호스트 이름과 일치합니다. 클라이언트와 서버 SPN을 완전히 다른 것으로 설정하거나 클라이언트의 지정된 SPN이 서버의 SPN과 일치하지 않으면 이전과 마찬가지로 인증이 NTLM으로 되돌아갑니다. Google은 오류에 대한 조사를 수행했지만 그 원인을 찾을 수 없습니다. 어떤 제안? NTLM 다시 떨어지고 우리가받을 때 오류를 "SSPI를 호출하지 못했습니다"-
우리는 또한 두 경우의 패킷 캡처를 수행했습니다. 두 경우 모두 NTLM이 언급 될 때까지 유사한 패킷이 송수신됩니다. 다른 한편으로, "TURN CHANNEL"패킷이 클라이언트에서 서버로 전송됩니다. 이 패킷에는 NTLM이 언급되고 사용자 이름과 컴퓨터 이름이 전송되거나 "튠 (TURN CHANNEL)"패킷이 전송 될 때까지 서버의 IP 주소를 제외하고는 사람이 읽을 수있는 것이 없습니다. 호스트 이름. 사람이 읽을 수있는 오류 코드 또는 오류 메시지는 나타나지 않습니다. 패킷에서 무엇을 찾아야하는지에 대한 제안이 있습니까?
진실을 말하면, 네트워크 스 니프 (sniff)를 사용하여 실패한 것을 확인합니다. –
@ Eric 어떤 정보를 찾고 있습니까? 패킷에 오류 메시지 및 이벤트 로그에 포함 된 정보가 더 포함되어 있습니까? –
나는 클라이언트가 연석을 시도하고 실패하는 것을 보게된다고 이론화 할 것이다. 오류 코드를 포함한 오류의 본질을 조사하는 것은 흥미로울 것입니다. –