Nieobsługiwane scenariusze
Z różnych powodów program Windows Communication Foundation (WCF) nie obsługuje niektórych określonych scenariuszy zabezpieczeń. Na przykład system Windows XP Home Edition nie implementuje protokołów uwierzytelniania SSPI ani Kerberos, dlatego program WCF nie obsługuje uruchamiania usługi z uwierzytelnianiem systemu Windows na tej platformie. Inne mechanizmy uwierzytelniania, takie jak nazwa użytkownika/hasło i zintegrowane uwierzytelnianie HTTP/HTTPS, są obsługiwane podczas uruchamiania programu WCF w systemie Windows XP Home Edition.
Scenariusze personifikacji
Tożsamość personifikowana może nie przepływać, gdy klienci tworzą wywołania asynchroniczne
Gdy klient programu WCF wykonuje wywołania asynchroniczne do usługi WCF przy użyciu uwierzytelniania systemu Windows w ramach personifikacji, uwierzytelnianie może wystąpić z tożsamością procesu klienta zamiast personifikowanej tożsamości.
System Windows XP i plik cookie bezpiecznego tokenu kontekstu włączony
Program WCF nie obsługuje personifikacji i InvalidOperationException jest zgłaszany, gdy istnieją następujące warunki:
System operacyjny to Windows XP.
Tryb uwierzytelniania powoduje wyświetlenie tożsamości systemu Windows.
Właściwość Impersonation właściwości OperationBehaviorAttribute jest ustawiona na Required.
Tworzony jest token kontekstu zabezpieczeń oparty na stanie (SCT) (domyślnie tworzenie jest wyłączone).
SCT oparty na stanie można utworzyć tylko przy użyciu powiązania niestandardowego. Aby uzyskać więcej informacji, zobacz How to: Create a Security Context Token for a Secure Session (Jak utworzyć token kontekstu zabezpieczeń dla bezpiecznej sesji). W kodzie token jest włączony przez utworzenie elementu powiązania zabezpieczeń ( SymmetricSecurityBindingElement lub AsymmetricSecurityBindingElement) przy użyciu SecurityBindingElement.CreateSspiNegotiationBindingElement(Boolean) metody lub SecurityBindingElement.CreateSecureConversationBindingElement(SecurityBindingElement, Boolean) i ustawienie parametru requireCancellation
na false
. Parametr odnosi się do buforowania SCT. Ustawienie wartości w celu false
włączenia funkcji SCT opartej na stanie.
Alternatywnie w konfiguracji token jest włączony przez utworzenie <customBinding>
elementu , a następnie dodanie <security>
elementu i ustawienie atrybutu authenticationMode
na SecureConversation i requireSecurityContextCancellation
atrybut na true
.
Uwaga
Powyższe wymagania są specyficzne. Na przykład CreateKerberosBindingElement element tworzy element powiązania, który powoduje tożsamość systemu Windows, ale nie ustanawia protokołu SCT. W związku z tym można go użyć z opcją Required
w systemie Windows XP.
Możliwy konflikt ASP.NET
WCF i ASP.NET mogą włączać lub wyłączać personifikację. Gdy ASP.NET hostuje aplikację WCF, może istnieć konflikt między programem WCF a ustawieniami konfiguracji ASP.NET. W przypadku konfliktu ustawienie WCF ma pierwszeństwo, chyba że Impersonation właściwość jest ustawiona na NotAllowed, w tym przypadku ustawienie personifikacji ASP.NET ma pierwszeństwo.
Ładowanie zestawów może zakończyć się niepowodzeniem pod personifikacją
Jeśli personifikowany kontekst nie ma uprawnień dostępu do ładowania zestawu i jeśli jest to pierwszy raz, gdy środowisko uruchomieniowe języka wspólnego (CLR) próbuje załadować zestaw dla tej domeny AppDomain, AppDomain buforuje błąd. Kolejne próby załadowania tego zestawu (lub zestawów) kończą się niepowodzeniem, nawet po wycofaniu personifikacji, a nawet jeśli przywrócony kontekst ma prawa dostępu do załadowania zestawu. Wynika to z faktu, że clR nie ponownie załadować po zmianie kontekstu użytkownika. Aby odzyskać odzyskiwanie po awarii, należy ponownie uruchomić domenę aplikacji.
Uwaga
Wartość domyślna AllowedImpersonationLevel właściwości WindowsClientCredential klasy to Identification. W większości przypadków kontekst personifikacji na poziomie identyfikacji nie ma uprawnień do ładowania żadnych dodatkowych zestawów. Jest to wartość domyślna, dlatego jest to bardzo typowy warunek, o jakim należy pamiętać. Personifikacja na poziomie identyfikacji występuje również wtedy, gdy proces personifikacji nie ma SeImpersonate
uprawnień. Aby uzyskać więcej informacji, zobacz Delegowanie i personifikacja.
Delegowanie wymaga negocjacji poświadczeń
Aby używać protokołu uwierzytelniania Kerberos z delegowaniem, należy zaimplementować protokół Kerberos z negocjowaniem poświadczeń (czasami nazywanym wieloetapowym lub wieloetapowym Kerberos). W przypadku zaimplementowania uwierzytelniania Kerberos bez negocjacji poświadczeń (czasami nazywanego jednorazowym lub jednonogowym Kerberos) zgłaszany jest wyjątek. Aby uzyskać więcej informacji na temat implementowania negocjacji poświadczeń, zobacz Debugowanie błędów uwierzytelniania systemu Windows.
Kryptografia
Algorytm SHA-256 jest obsługiwany tylko w przypadku użycia kluczy symetrycznych
Program WCF obsługuje różne algorytmy tworzenia szyfrowania i skrótu podpisu, które można określić przy użyciu zestawu algorytmów w powiązaniach dostarczanych przez system. W celu zwiększenia bezpieczeństwa usługa WCF obsługuje algorytmy Secure Hash Algorithm (SHA) 2, w szczególności SHA-256, do tworzenia skrótów skrótów podpisów. Ta wersja obsługuje algorytm SHA-256 tylko w przypadku użycia kluczy symetrycznych, takich jak klucze Protokołu Kerberos i gdzie certyfikat X.509 nie jest używany do podpisywania komunikatu. Program WCF nie obsługuje podpisów RSA (używanych w certyfikatach X.509) przy użyciu skrótu SHA-256 ze względu na bieżący brak obsługi RSA-SHA256 w systemie WinFX.
Skróty SHA-256 zgodne ze standardem FIPS nie są obsługiwane
Funkcja WCF nie obsługuje skrótów zgodnych ze standardem FIPS SHA-256, dlatego zestawy algorytmów używające algorytmu SHA-256 nie są obsługiwane przez usługę WCF w systemach, w których wymagane jest użycie algorytmów zgodnych ze standardem FIPS.
Algorytmy zgodne ze standardem FIPS mogą zakończyć się niepowodzeniem, jeśli rejestr jest edytowany
Algorytmy zgodne ze standardami FIPS (Federal Information Processing Standards) można włączać i wyłączać przy użyciu przystawki Microsoft Management Console (MMC) ustawień lokalnych. Możesz również uzyskać dostęp do ustawienia w rejestrze. Należy jednak pamiętać, że program WCF nie obsługuje resetowania ustawienia przy użyciu rejestru. Jeśli wartość jest ustawiona na wartość inną niż 1 lub 0, niespójne wyniki mogą wystąpić między clR i systemem operacyjnym.
Ograniczenie szyfrowania AES zgodne ze standardem FIPS
Szyfrowanie AES zgodne ze standardem FIPS nie działa w wywołaniach zwrotnych dwudupleksowych pod personifikacją poziomu identyfikacji.
Certyfikaty CNG/KSP
Interfejs API kryptografii: Następna generacja (CNG) jest długoterminowym zamiennikiem interfejsu CryptoAPI. Ten interfejs API jest dostępny w kodzie niezarządzanych w systemach Windows Vista, Windows Server 2008 i nowszych wersjach systemu Windows.
Program .NET Framework 4.6.1 i starsze wersje nie obsługują tych certyfikatów, ponieważ używają starszego interfejsu CryptoAPI do obsługi certyfikatów CNG/KSP. Użycie tych certyfikatów w programie .NET Framework 4.6.1 i starszych wersjach spowoduje wyjątek.
Istnieją dwa możliwe sposoby na powiedzenie, czy certyfikat korzysta z dostawcy KSP:
Wykonaj polecenie ,
p/invoke
CertGetCertificateContextProperty
a następnie sprawdźdwProvType
zwróconyCertGetCertificateContextProperty
element .certutil
Użyj polecenia z wiersza polecenia do wykonywania zapytań o certyfikaty. Aby uzyskać więcej informacji, zobacz Certutil tasks for troubleshooting certificates (Zadania narzędzia Certutil dotyczące rozwiązywania problemów z certyfikatami).
Zabezpieczenia komunikatów kończą się niepowodzeniem, jeśli wymagane jest użycie personifikacji ASP.NET i zgodności ASP.NET
Program WCF nie obsługuje następującej kombinacji ustawień, ponieważ mogą uniemożliwić uwierzytelnianie klienta:
ASP.NET Personifikacja jest włączona. Odbywa się to w pliku Web.config przez ustawienie
impersonate
atrybutu<identity>
elementu natrue
.ASP.NET tryb zgodności jest włączony przez ustawienie
aspNetCompatibilityEnabled
atrybutu <serviceHostingEnvironment> natrue
.Używane są zabezpieczenia trybu komunikatów.
Obejście polega na wyłączeniu trybu zgodności ASP.NET. Ewentualnie, jeśli wymagany jest tryb zgodności ASP.NET, wyłącz funkcję personifikacji ASP.NET i zamiast tego użyj personifikacji dostarczonej przez program WCF. Aby uzyskać więcej informacji, zobacz Delegowanie i personifikacja.
Błąd adresu literału IPv6
Żądania zabezpieczeń kończą się niepowodzeniem, gdy klient i usługa znajdują się na tej samej maszynie, a adresy literału IPv6 są używane dla usługi.
Adresy IPv6 literału działają, jeśli usługa i klient znajdują się na różnych maszynach.
Błędy pobierania WSDL z federacyjnym zaufaniem
Program WCF wymaga dokładnie jednego dokumentu WSDL dla każdego węzła w łańcuchu zaufania federacyjnego. Należy zachować ostrożność, aby nie skonfigurować pętli podczas określania punktów końcowych. Jednym ze sposobów powstawania pętli jest użycie pobierania w języku WSDL łańcuchów zaufania federacyjnego z co najmniej dwoma linkami w tym samym dokumencie WSDL. Typowym scenariuszem, który może spowodować ten problem, jest usługa federacyjna, w której serwer tokenów zabezpieczających i usługa znajdują się wewnątrz tego samego hosta ServiceHost.
Przykładem takiej sytuacji jest usługa z następującymi trzema adresami punktów końcowych:
http://localhost/CalculatorService/service
(usługa)http://localhost/CalculatorService/issue_ticket
(STS)http://localhost/CalculatorService/mex
(punkt końcowy metadanych)
Spowoduje to zgłoszenie wyjątku.
Ten scenariusz może działać, umieszczając issue_ticket
punkt końcowy w innym miejscu.
Atrybuty importu WSDL można utracić
Program WCF traci śledzenie atrybutów elementu <wst:Claims>
w szablonie RST
podczas importowania WSDL. Dzieje się tak podczas importowania WSDL, jeśli określisz <Claims>
bezpośrednio w WSFederationHttpBinding.Security.Message.TokenRequestParameters
kolekcji typów oświadczeń lub IssuedSecurityTokenRequestParameters.AdditionalRequestParameters
zamiast ich bezpośrednio. Ponieważ import traci atrybuty, powiązanie nie odbywa się prawidłowo za pośrednictwem języka WSDL i dlatego jest niepoprawne po stronie klienta.
Poprawka polega na zmodyfikowaniu powiązania bezpośrednio na kliencie po zakończeniu importowania.