Mam usługę internetową WCF, obecnie obsługiwaną przez punkt końcowy WSHttpBinding z zabezpieczeniami transportu i typem poświadczeń klienta Windows. Usługa jest hostowana w oparciu o IIS 5.1 ze skonfigurowanym protokołem SSL przy użyciu certyfikatu z urzędu certyfikacji domeny. Same usługi IIS działają z tożsamością [email protected] na komputerze domeny. Dostęp anonimowy jest wyłączony, a zintegrowane uwierzytelnianie systemu Windows jest jedynym sposobem uwierzytelnienia.
Usługa posiada metodę zwracającą aktualną nazwę tożsamości systemu Windows i poziom personifikacji. Metoda ma wartość Impersonation ustawioną na Required w swoim OperationBehaviourAttribute.
[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public IEnumerable<string> GetInformation()
{
WindowsIdentity identity = WindowsIdentity.GetCurrent();
return new List<string>()
{
identity.Name,
identity.ImpersonationLevel.ToString()
};
}
Buduję kanał WCF ręcznie w kliencie i zezwalam na delegowanie usługi.
WSHttpBinding binding = new WSHttpBinding();
binding.Security.Mode = SecurityMode.Transport;
binding.Security.Transport.ClientCredentialType =
HttpClientCredentialType.Windows;
EndpointAddress endpoint =
new EndpointAddress("https://host/DelegateService/Service.svc");
ChannelFactory<ServiceInterface.IService> cf =
new ChannelFactory<ServiceInterface.IService>(binding, endpoint);
cf.Credentials.Windows.AllowedImpersonationLevel =
TokenImpersonationLevel.Delegation;
ServiceInterface.IService service = cf.CreateChannel();
Klientem jest w pełni zaufany XBAP podpisany certyfikatem domeny, który został przeniesiony do magazynu certyfikatów Trusted Publishers.
Na komputerze hosta, [email protected] i [email protected], w domenie skonfigurowano opcję Zezwalaj na delegowanie i żaden z użytkowników nie jest oznaczony jako wrażliwy. SeImpersonatePrivilege również nie powinno stanowić problemu, ponieważ Impersonation działa.
Gdy klient wywołuje metodę usługi, metoda zwraca „domena\bieżący” i „Impersonation”. Potrzebuję „domeny\bieżącej” i „Delegacji”. Zgodnie z drugą tabelą pod adresem http://msdn.microsoft.com/en-us/library/ms730088.aspx oznaczałoby to, że klient lub usługa nie mają możliwości delegowania.
Domena posiada poziom funkcjonalności Windows 2000 Mixed. Czytałem gdzieś, że oznacza to uwierzytelnianie NTLM, ale uważam, że odnosiło się to do ruchu między kontrolerami domeny. Gdy nie działa na https, Wireshark pokazuje supportedMech: 1.2.840.48018.1.2.2 (MS KRB5 - Microsoft Kerberos 5)
w odpowiedzi http, więc wygląda na to, że Kerberos jest włączony.
Technicznie rzecz biorąc, moglibyśmy podnieść poziom funkcjonalności do systemu Windows 2003, ponieważ oba kontrolery domeny, które posiadamy, to oba serwery W2K3, ale dział IT nie jest obecnie w stanie przydzielić zasobów do operacji tworzenia kopii zapasowych i takich, które chce wykonać przed ich wykonaniem i podniesieniem funkcjonalności poziom.
Mamy wirtualną domenę testową, którą można uaktualnić do poziomu funkcjonalnego systemu Windows Server 2003, ale w tej domenie brakuje urzędu certyfikacji lub komputerów klienckich z zainstalowanymi usługami IIS, więc chociaż poziom funkcjonalności można podnieść do celów testowych, konfigurując resztę infrastruktury to sporo pracy.
Jest to problem, z którym od jakiegoś czasu nie mogę sobie poradzić. Wydaje się, że w Internecie pełno jest artykułów typu „Tak się to robi”, ale nie miałem z nimi szczęścia. Jakieś pomysły, co jest nie tak?