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 lub private, pod warunkiem, że [ServiceContract] interfejs to public.

  • 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 być internal i mieć internal członków.

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

Własne powiązania można tworzyć i używać w środowisku częściowego zaufania, ale muszą być zgodne z ograniczeniami określonymi w tej sekcji.

Transport

Jedynymi dozwolonymi elementami powiązania transportu są HttpTransportBindingElement i HttpsTransportBindingElement.

Enkodery

Dozwolone są następujące kodery:

Kodery mechanizmu optymalizacji transmisji komunikatów (MTOM) nie są obsługiwane.

Zabezpieczenia

Częściowo zaufane aplikacje mogą używać funkcji zabezpieczeń WCF na poziomie transportu do ochrony swojej komunikacji. Zabezpieczenia na poziomie komunikatów nie są obsługiwane. Skonfigurowanie powiązania w celu korzystania z zabezpieczeń na poziomie komunikatów powoduje wyjątek w czasie wykonywania.

Nieobsługiwane powiązania

Powiązania, które wykorzystują niezawodne przesyłanie wiadomości, transakcje lub zabezpieczenia na poziomie wiadomości, nie są obsługiwane.

Serializacja

DataContractSerializer i XmlSerializer są obsługiwane w środowisku częściowego zaufania. Jednak użycie obiektu DataContractSerializer podlega następującym warunkom:

  • Wszystkie serializowalne [DataContract] typy muszą być public.

  • Wszystkie pola lub właściwości z możliwością serializacji w typie [DataMember] muszą być publiczne i z możliwością odczytu i zapisu. Serializacja i deserializacja pól readonly nie jest obsługiwana podczas uruchamiania programu WCF w częściowo zaufanym środowisku.

  • Model programowania [Serializable] 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 Najlepsze praktyki dla częściowego zaufania aby uzyskać więcej informacji na temat zabezpieczeń przy bezpiecznym użyciu 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ą obsługiwać implementację publicGetEnumerator() oraz jawną implementację 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 zaufanym, jeśli żadna z implementacji GetEnumerator() nie jest public lub żadna z nich nie jest jawną implementacją interfejsu, zgłaszany jest wyjątek zabezpieczeń.

NetDataContractSerializer

Wiele kolekcji w .NET Framework, takich jak List<T>, ArrayList, Dictionary<TKey,TValue> i Hashtable, nie jest obsługiwanych przez NetDataContractSerializer w środowisku o ograniczonym zaufaniu. Te typy mają ustawiony atrybut [Serializable], a jak wspomniano wcześniej w sekcji dotyczącej serializacji, ten atrybut nie jest obsługiwany w przypadku częściowego zaufania. DataContractSerializer traktuje kolekcje w specjalny sposób i dlatego jest w stanie obejść to ograniczenie, ale NetDataContractSerializer nie ma mechanizmu, który by to umożliwiał.

Typ DateTimeOffset nie jest obsługiwany przez NetDataContractSerializer w środowisku o częściowym zaufaniu.

Nie można używać zastępczego NetDataContractSerializer przy użyciu mechanizmu SurrogateSelector podczas uruchamiania w środowisku o ograniczonym zaufaniu. Należy pamiętać, że to ograniczenie dotyczy używania obiektu zastępczego, a nie serializacji.

Włączanie typowych zachowań do działania

Zachowania usługi lub punktu końcowego, które nie są oznaczone atrybutem AllowPartiallyTrustedCallersAttribute (APTCA) i które dodawane są do <sekcji commonBehaviors> pliku konfiguracji, nie są uruchamiane, gdy aplikacja działa w środowisku częściowego zaufania, i nie zgłasza się żadnego wyjątku, gdy tak się dzieje. Aby wymusić uruchamianie typowych zachowań, należy wykonać jedną z następujących czynności:

  • Oznacz swoje typowe zachowanie za pomocą atrybutu AllowPartiallyTrustedCallersAttribute, aby można je było uruchomić podczas wdrażania jako aplikacja o częściowym zaufaniu. Należy pamiętać, że na komputerze można ustawić wpis rejestru, aby zapobiec uruchamianiu zestawów oznaczonych jako 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 jest możliwe, zachowanie nie zostanie uruchomione i nie zostanie zgłoszony żaden wyjątek. Aby się upewnić, sprawdź opcję levelfinal za pomocą 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 wczytać sekcje konfiguracji WCF, które odwołują się do sekcji w pliku machine.config lub w pliku głównym web.config, wymagane jest posiadanie ConfigurationPermission(Unrestricted). Bez tego uprawnienia odwołania do sekcji konfiguracji WCF (zachowań, powiązań) znajdujących się poza lokalnym plikiem konfiguracyjnym powodują wyjątek podczas ładowania konfiguracji.

Jednym wyjątkiem jest konfiguracja typu znanego dla serializacji, jak opisano w sekcji Serializacja tego tematu.

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

Ograniczona funkcjonalność śledzenia jest dostępna w przypadku uruchamiania w środowisku częściowego 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:

Następujące źródła śledzenia nie są obsługiwane:

Nie należy określać następujących członków wyliczenia TraceOptions:

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, upewnij się, że aplikacja ma wymagane uprawnienia 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 w momencie, gdy po raz pierwszy podejmowana jest próba uzyskania dostępu do zasobu lub wykonania operacji.

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 WCF jest hostowany w aplikacji przeglądarki XAML (XBAP), podlega ograniczeniom XBAP, zgodnie z opisem w Bezpieczeństwo częściowego zaufania 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 o częściowym zaufaniu, 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, jest próba uzyskania dostępu do zasobu lub wykonania akcji wewnątrz bloku try, a następnie zanotowanie niepowodzenia catch. 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 przy pierwszej próbie uzyskania tego dostępu lub wykonania działania.

Zobacz też