Zgodność funkcji zaufania częściowego
Program Windows Communication Foundation (WCF) obsługuje ograniczony podzestaw funkcji w przypadku uruchamiania w częściowo zaufanym środowisku. Funkcje obsługiwane w częściowym zaufaniu są projektowane wokół określonego zestawu scenariuszy zgodnie z opisem w temacie Obsługiwane scenariusze wdrażania.
Minimalne wymagania dotyczące uprawnień
Program WCF obsługuje podzestaw funkcji w aplikacjach działających w ramach jednego z następujących standardowych nazwanych zestawów uprawnień:
Uprawnienia średniego zaufania
Uprawnienia strefy internetowej
Próba użycia usługi WCF w częściowo zaufanych aplikacjach z bardziej restrykcyjnymi uprawnieniami może spowodować wyjątki zabezpieczeń w czasie wykonywania.
Kontrakty
Umowy podlegają następującym ograniczeniom w przypadku wykonywania w ramach częściowego zaufania:
Klasa usługi, która implementuje
[ServiceContract]
interfejs, musi byćpublic
i miećpublic
konstruktor. Jeśli definiuje[OperationContract]
metody, muszą to byćpublic
. Jeśli zamiast tego implementuje[ServiceContract]
interfejs, implementacje tych metod mogą być jawne lubprivate
, pod warunkiem, że[ServiceContract]
interfejs topublic
.W przypadku używania atrybutu
[ServiceKnownType]
określona metoda musi mieć wartośćpublic
.[MessageContract]
klasy i ich składowe mogą mieć wartośćpublic
. Jeśli klasa jest zdefiniowana[MessageContract]
w zestawie aplikacji, może to byćinternal
i miećinternal
elementy członkowskie.
Wiązania dostarczane przez system
Funkcje BasicHttpBinding i WebHttpBinding są w pełni obsługiwane w środowisku częściowego zaufania. Element WSHttpBinding jest obsługiwany tylko w przypadku trybu zabezpieczeń transportu.
Powiązania korzystające z transportu innego niż HTTP, takie jak NetTcpBinding, , NetNamedPipeBindinglub NetMsmqBinding, nie są obsługiwane w przypadku uruchamiania w środowisku częściowego zaufania.
Powiązania niestandardowe
Powiązania niestandardowe można tworzyć i używać w środowisku częściowo zaufania, ale muszą być zgodne z ograniczeniami określonymi w tej sekcji.
Transporty
Jedynymi dozwolonymi elementami powiązania transportu są HttpTransportBindingElement i HttpsTransportBindingElement.
Kodery
Dozwolone są następujące kodery:
Koder tekstu (TextMessageEncodingBindingElement).
Koder binarny (BinaryMessageEncodingBindingElement).
Koder komunikatów sieci Web (WebMessageEncodingBindingElement).
Kodery mechanizmu optymalizacji transmisji komunikatów (MTOM) nie są obsługiwane.
Zabezpieczenia
Częściowo zaufane aplikacje mogą używać funkcji zabezpieczeń na poziomie transportu WCF do zabezpieczania komunikacji. Zabezpieczenia na poziomie komunikatów nie są obsługiwane. Skonfigurowanie powiązania w celu używania zabezpieczeń na poziomie komunikatów powoduje wyjątek w czasie wykonywania.
Nieobsługiwane powiązania
Powiązania korzystające z niezawodnych komunikatów, transakcji lub zabezpieczeń na poziomie komunikatów nie są obsługiwane.
Serializacja
DataContractSerializer Oba elementy i XmlSerializer są obsługiwane w środowisku częściowego zaufania. Jednak użycie obiektu DataContractSerializer podlega następującym warunkom:
Wszystkie typy możliwe do
[DataContract]
serializacji muszą mieć wartośćpublic
.Wszystkie pola lub właściwości z możliwością serializacji w typie
[DataContract]
muszą być publiczne i odczytywane[DataMember]
/zapisywane. Serializacja i deserializacjireadonly
pól nie jest obsługiwana podczas uruchamiania programu WCF w częściowo zaufanej aplikacji.Model
[Serializable]
programowania /ISerializable nie jest obsługiwany w środowisku częściowego zaufania.Znane typy muszą być określone w konfiguracji kodu lub na poziomie komputera (machine.config). Znanych typów nie można określić w konfiguracji na poziomie aplikacji ze względów bezpieczeństwa.
Typy implementujące IObjectReference zgłaszają wyjątek w częściowo zaufanym środowisku.
Zobacz sekcję Serializacja w częściowych najlepszych rozwiązań dotyczących zaufania, aby uzyskać więcej informacji na temat zabezpieczeń w przypadku bezpiecznego używania DataContractSerializer w częściowo zaufanej aplikacji.
Typy kolekcji
Niektóre typy kolekcji implementują zarówno metody , jak IEnumerable<T> i IEnumerable. Przykłady obejmują typy implementujące ICollection<T>. Takie typy mogą implementować implementację public
GetEnumerator()
elementu i jawną implementację klasy GetEnumerator()
. W takim przypadku DataContractSerializer wywołuje implementację public
elementu GetEnumerator()
, a nie jawną implementację .GetEnumerator()
Jeśli żadna z GetEnumerator()
implementacji nie jest public
i wszystkie są jawnymi implementacjami, DataContractSerializer wywoła metodę IEnumerable.GetEnumerator()
.
W przypadku typów kolekcji, gdy program WCF działa w środowisku częściowo zaufania, jeśli żadna GetEnumerator()
z implementacji nie jest public
lub żadna z nich nie są jawnymi implementacjami interfejsu, zgłaszany jest wyjątek zabezpieczeń.
NetDataContractSerializer
Wiele typów kolekcji programu .NET Framework, takich jak List<T>, ArrayListi Dictionary<TKey,TValue> Hashtable nie jest obsługiwanych przez NetDataContractSerializer element w częściowym zaufaniu. Te typy mają zestaw atrybutów [Serializable]
, a jak określono wcześniej w sekcji Serializacja, ten atrybut nie jest obsługiwany w częściowej relacji zaufania. DataContractSerializer Kolekcje są traktowane w specjalny sposób i w ten sposób jest w stanie obejść to ograniczenie, ale NetDataContractSerializer nie ma takiego mechanizmu obejścia tego ograniczenia.
Typ DateTimeOffset nie jest obsługiwany przez NetDataContractSerializer element w częściowym zaufaniu.
Nie można używać zastępczego NetDataContractSerializer z (przy użyciu SurrogateSelector mechanizmu) podczas uruchamiania w częściowym zaufaniu. Należy pamiętać, że to ograniczenie dotyczy używania zastępczego, a nie serializacji.
Włączanie typowych zachowań do uruchomienia
Zachowania usługi lub punktu końcowego nie są oznaczone atrybutem AllowPartiallyTrustedCallersAttribute (APTCA), które są dodawane do <sekcji commonBehaviors> pliku konfiguracji, nie są uruchamiane, gdy aplikacja działa w środowisku częściowego zaufania i nie jest zgłaszany żaden wyjątek w przypadku wystąpienia tego problemu. Aby wymusić uruchamianie typowych zachowań, należy wykonać jedną z następujących opcji:
Oznacz typowe zachowanie za pomocą atrybutu AllowPartiallyTrustedCallersAttribute , aby można było go uruchomić podczas wdrażania jako aplikacja częściowo zaufania. Należy pamiętać, że na komputerze można ustawić wpis rejestru, aby zapobiec uruchamianiu zestawów oznaczonych przez APTCA. .
Upewnij się, że jeśli aplikacja jest wdrożona jako w pełni zaufana aplikacja, której użytkownicy nie mogą modyfikować ustawień zabezpieczeń dostępu do kodu w celu uruchomienia aplikacji w środowisku częściowo zaufania. Jeśli to zrobią, zachowanie nie zostanie uruchomione i nie zostanie zgłoszony żaden wyjątek. Aby to upewnić się, zobacz opcję poziomfinalny przy użyciu Caspol.exe (narzędzie zasad zabezpieczeń dostępu kodu).
Przykład typowego zachowania można znaleźć w temacie How to: Lock Down Endpoints in the Enterprise (Jak: blokowanie punktów końcowych w przedsiębiorstwie).
Konfigurowanie
Z jednym wyjątkiem kod częściowo zaufany może ładować tylko sekcje konfiguracji programu WCF w pliku lokalnym app.config
. Aby załadować sekcje konfiguracji programu WCF odwołujące się do sekcji programu WCF w pliku machine.config lub w głównym pliku web.config, wymaga konfiguracjiPermission(Unrestricted). Bez tego uprawnienia odwołania do sekcji konfiguracji programu WCF (zachowania, powiązania) poza lokalnym plikiem konfiguracji powoduje wyjątek podczas ładowania konfiguracji.
Jeden wyjątek jest znaną konfiguracją typu serializacji, zgodnie z opisem w sekcji Serializacja w tym temacie.
Ważne
Rozszerzenia konfiguracji są obsługiwane tylko w przypadku uruchamiania w obszarze Pełne zaufanie.
Diagnostyka
Rejestrowanie zdarzeń
Ograniczone rejestrowanie zdarzeń jest obsługiwane w ramach częściowego zaufania. Tylko błędy aktywacji usługi i błędy śledzenia/rejestrowania komunikatów są rejestrowane w dzienniku zdarzeń. Maksymalna liczba zdarzeń, które mogą być rejestrowane przez proces, wynosi 5, aby uniknąć zapisywania nadmiernych komunikatów w dzienniku zdarzeń.
Rejestrowanie komunikatów
Rejestrowanie komunikatów nie działa, gdy program WCF jest uruchamiany w środowisku częściowego zaufania. Jeśli ta opcja jest włączona w ramach częściowego zaufania, aktywacja usługi nie kończy się niepowodzeniem, ale nie jest rejestrowany żaden komunikat.
Śledzenie
Funkcje śledzenia z ograniczeniami są dostępne w przypadku uruchamiania w środowisku częściowo zaufania. W elemecie <listeners>
w pliku konfiguracji jedynymi typami, które można dodać, są TextWriterTraceListener i nowe EventSchemaTraceListener. Użycie standardu XmlWriterTraceListener może spowodować niekompletne lub nieprawidłowe dzienniki.
Obsługiwane źródła śledzenia to:
System.IdentityModel.Claims, System.IdentityModel.Policy, System.IdentityModel.Selectors i System.IdentityModel.Tokens.
Następujące źródła śledzenia nie są obsługiwane:
Nie należy określać następujących elementów TraceOptions członkowskich wyliczenia:
W przypadku korzystania ze śledzenia w środowisku częściowego zaufania upewnij się, że aplikacja ma wystarczające uprawnienia do przechowywania danych wyjściowych odbiornika śledzenia. Na przykład w przypadku zapisywania danych wyjściowych śledzenia w pliku tekstowym przy użyciu TextWriterTraceListener elementu , upewnij się, że aplikacja ma wymaganą wymaganą operację FileIOPermission do pomyślnego zapisania w pliku śledzenia.
Uwaga
Aby uniknąć zalewania plików śledzenia z powodu zduplikowanych błędów, program WCF wyłącza śledzenie zasobu lub akcji po pierwszej awarii zabezpieczeń. Istnieje jeden ślad wyjątku dla każdego nieudanego dostępu do zasobu, po raz pierwszy podjęto próbę uzyskania dostępu do zasobu lub wykonania akcji.
Host usługi WCF
Host usługi WCF nie obsługuje częściowego zaufania. Jeśli chcesz użyć usługi WCF w częściowym zaufaniu, nie używaj szablonu projektu biblioteki usług WCF w programie Visual Studio do kompilowania usługi. Zamiast tego utwórz nową witrynę sieci Web w programie Visual Studio, wybierając szablon witryny sieci Web usługi WCF, który może hostować usługę na serwerze sieci Web, na którym jest obsługiwane częściowe zaufanie WCF.
Inne ograniczenia
Program WCF jest zazwyczaj ograniczony do zagadnień dotyczących zabezpieczeń narzuconych przez aplikację hostingu. Na przykład jeśli program WCF jest hostowany w aplikacji przeglądarki XAML (XBAP), podlega ograniczeniom XBAP, zgodnie z opisem w częściowych zabezpieczeń zaufania programu Windows Presentation Foundation.
Następujące dodatkowe funkcje nie są włączone podczas uruchamiania indigo2 w środowisku częściowego zaufania:
Instrumentacja zarządzania Windows (WMI)
Rejestrowanie zdarzeń jest włączone tylko częściowo (zobacz dyskusję w sekcji Diagnostyka ).
Liczniki wydajności
Korzystanie z funkcji WCF, które nie są obsługiwane w środowisku częściowo zaufania, może spowodować wyjątki w czasie wykonywania.
Funkcje nieznajdowane na liście
Najlepszym sposobem wykrycia, że część informacji lub akcji jest niedostępna podczas uruchamiania w środowisku częściowego zaufania, polega na próbie uzyskania dostępu do zasobu lub wykonania akcji wewnątrz try
bloku, a następnie catch
awarii. Aby uniknąć zalewania plików śledzenia z powodu zduplikowanych błędów, program WCF wyłącza śledzenie zasobu lub akcji po pierwszej awarii zabezpieczeń. Istnieje jeden ślad wyjątku dla każdego nieudanego dostępu do zasobu, po raz pierwszy podjęto próbę uzyskania dostępu do zasobu lub wykonania akcji.