Freigeben über


Kompatibilität von Funktionen für partielle Vertrauensstufe

Windows Communication Foundation (WCF) unterstützt eine eingeschränkte Teilmenge seiner Funktionalität, wenn sie in einer teilweise vertrauenswürdigen Umgebung ausgeführt wird. Die in einer teilweise vertrauenswürdigen Umgebung unterstützten Funktionen sind, wie im Thema Supported Deployment Scenarios beschrieben, für einen speziellen Satz von Szenarios konzipiert.

Minimal erforderliche Berechtigungen

WCF unterstützt eine Teilmenge von Funktionen in Anwendungen, die unter einem der beiden folgenden benannten Standardberechtigungssätze ausgeführt werden:

  • Berechtigungen für mittlere Vertrauenswürdigkeit

  • Internetzonenberechtigungen

Der Versuch, WCF in teilweise vertrauenswürdigen Anwendungen mit restriktiveren Berechtigungen zu verwenden, kann zur Laufzeit zu Sicherheitsausnahmen führen.

Verträge

Beim Ausführen in teilweise vertrauenswürdigen Umgebungen unterliegen Verträge den folgenden Einschränkungen:

  • Die Dienstklasse, durch die die [ServiceContract] -Schnittstelle implementiert wird, muss public sein und über einen public -Konstruktor verfügen. Werden [OperationContract] -Methoden definiert, müssen diese publicsein. Wird stattdessen eine [ServiceContract] -Schnittstelle implementiert, können diese Methodenimplementierungen explizit oder privatesein, vorausgesetzt, die [ServiceContract] -Schnittstelle ist public.

  • Bei Verwendung des [ServiceKnownType] -Attributs muss die angegebene Methode publicsein.

  • [MessageContract]-Klassen und ihre Mitglieder können public sein. Ist in der Anwendungsassembly die [MessageContract] -Klasse definiert, kann diese internal sein und Member vom Typ internal besitzen.

Vom System bereitgestellte Bindungen

Sowohl BasicHttpBinding als auch WebHttpBinding werden in einer Partial-Trust-Umgebung vollständig unterstützt. WSHttpBinding wird nur für den Transportsicherheitsmodus unterstützt.

Bindungen, die andere Transportoptionen als HTTP verwenden, etwa NetTcpBinding, NetNamedPipeBindingoder NetMsmqBinding, werden in einer teilweise vertrauenswürdigen Umgebung nicht unterstützt.

Benutzerdefinierte Bindungen

Benutzerdefinierte Bindungen können in einer teilweise vertrauenswürdigen Umgebung erstellt und verwendet werden. Für sie gelten jedoch die in diesem Abschnitt genannten Einschränkungen.

Transport

Die einzigen zulässigen Transportbindungselemente sind HttpTransportBindingElement und HttpsTransportBindingElement.

Encoder

Folgende Encoder sind zulässig:

MTOM (Message Transmission Optimization Mechanism)-Encoder werden nicht unterstützt.

Sicherheit

Teilweise vertrauenswürdige Anwendungen können die Funktionen von WCF für die Sicherheit auf Transportebene zum Schutz ihrer Kommunikation verwenden. Sicherheit auf Nachrichtenebene wird nicht unterstützt. Das Konfigurieren einer Bindung zur Verwendung der Sicherheitsstufe auf Nachrichtenebene führt zur Laufzeit zu einer Ausnahme.

Nicht unterstützte Bindungen

Bindungen, die zuverlässiges Messaging, Transaktionen oder Sicherheit auf Nachrichtenebene verwenden, werden nicht unterstützt.

Serialisierung

Sowohl DataContractSerializer als auch XmlSerializer werden in einer teilweise vertrauenswürdigen Umgebung unterstützt. Allerdings unterliegt die Verwendung von DataContractSerializer den folgenden Bedingungen:

  • Alle serialisierbaren [DataContract] -Typen müssen als publicdeklariert sein.

  • Alle serialisierbaren [DataMember] -Felder oder -Eigenschaften in einem [DataContract] -Typ müssen öffentlich sein und Schreib-/Lesezugriff besitzen. Die Serialisierung und Deserialisierung von readonly-Feldern wird nicht unterstützt, wenn WCF in einer teilweise vertrauenswürdigen Anwendung ausgeführt wird.

  • Das [Serializable]/ISerializable-Programmiermodell wird in einer teilweise vertrauenswürdigen Umgebung nicht unterstützt.

  • Bekannte Typen müssen im Code oder in einer Konfiguration auf Computerebene (machine.config) angegeben werden. Bekannte Typen können aus Sicherheitsgründen nicht in einer Konfiguration auf Anwendungsebene angegeben werden.

  • Typen die IObjectReference implementieren, lösen in einer teilweise vertrauenswürdigen Umgebung eine Ausnahme aus.

Im Abschnitt zur Serialisierung finden Sie unter Partial Trust Best Practices weitere Informationen zur Sicherheit bei der Verwendung von DataContractSerializer in einer teilweise vertrauenswürdigen Umgebung.

Sammlungstypen

Einige Auflistungstypen implementieren sowohl IEnumerable<T> als auch IEnumerable. Beispiele dafür sind Typen, die ICollection<T>implementieren. Solche Typen können eine public -Implementierung von GetEnumerator()und eine explizite Implementierung von GetEnumerator()enthalten. In diesem Fall ruft DataContractSerializer die public -Implementierung von GetEnumerator()auf, und nicht die explizite Implementierung von GetEnumerator(). Wenn keine der GetEnumerator()-Implementierungen public ist und alle explizite Implementierungen sind, dann ruft DataContractSerializerIEnumerable.GetEnumerator() auf.

Wenn WCF in einer teilweise vertrauenswürdigen Umgebung ausgeführt wird und keine der GetEnumerator()-Implementierungen public ist oder keine davon eine explizite Schnittstellenimplementierung ist, wird eine Sicherheitsausnahme bei Auflistungstypen ausgelöst.

NetDataContractSerializer

Viele .NET Framework-Auflistungstypen (wie List<T>, ArrayList, Dictionary<TKey,TValue> und Hashtable) werden vom NetDataContractSerializer im teilweisen Vertrauensmodus nicht unterstützt. Für diese Typen ist das [Serializable] -Attribut festgelegt. Wie bereits im Abschnitt zur Serialisierung erwähnt, wird dieses Attribut in teilweise vertrauenswürdigen Umgebungen nicht unterstützt. Der DataContractSerializer behandelt Auflistungen auf besondere Weise und kann daher diese Einschränkung umgehen; der NetDataContractSerializer jedoch verfügt über keinen Mechanismus, um diese Einschränkung zu umgehen.

Der DateTimeOffset -Typ wird vom NetDataContractSerializer in teilweiser vertrauenswürdigen Umgebungen nicht unterstützt.

Beim Ausführen in teilweise vertrauenswürdigen Umgebungen kann kein Stellvertreter mit dem NetDataContractSerializer mithilfe des SurrogateSelector-Mechanismus verwendet werden. Beachten Sie, dass diese Einschränkung für die Verwendung eines Ersatzzeichens gilt, nicht für dessen Serialisierung.

Aktivieren von Standardverhalten zur Ausführung

Dienst- oder Endpunktverhaltensweisen, die nicht mit dem Attribut AllowPartiallyTrustedCallersAttribute (APTCA) gekennzeichnet sind und dem Abschnitt <commonBehaviors> einer Konfigurationsdatei hinzugefügt wurden, werden nicht ausgeführt, wenn die Anwendung in einer teilweise vertrauenswürdigen Umgebung ausgeführt wird. In diesem Fall wird auch keine Ausnahme ausgelöst. Um die Ausführung gemeinsamer Verhaltensweisen sicherzustellen, müssen Sie eine der folgenden Optionen wählen:

  • Markieren Sie das gemeinsame Verhalten mit dem AllowPartiallyTrustedCallersAttribute -Attribut, damit es ausgeführt werden kann, wenn es als teilweise vertrauenswürdige Anwendung bereitgestellt wird. Beachten Sie, dass auf dem Computer ein Registrierungseintrag festgelegt werden kann, um die Ausführung von mit APTCA markierten Assemblys zu verhindern. .

  • Wenn die Anwendung als voll vertrauenswürdige Anwendung bereitgestellt wird, stellen Sie sicher, dass die Benutzer die Sicherheitseinstellungen für den Codezugriff nicht dahingehend ändern können, dass die Anwendung in einer teilweise vertrauenswürdigen Umgebung ausgeführt werden kann. Wenn sie dies können, dann wird das vorgesehene Verhalten nicht ausgeführt, und es wird keine Ausnahme ausgelöst. Eine Möglichkeit, dieses sicherzustellen, wird unter der Option levelfinal in Caspol.exe (Richtlinientool für die Codezugriffssicherheit) beschrieben.

Ein Beispiel für ein gemeinsames Verhalten finden Sie unter Vorgehensweise: Sperren von Endpunkten im Unternehmen.

Konfiguration

Bis auf eine Ausnahme kann teilweise vertrauenswürdiger Code nur WCF-Konfigurationsabschnitte in der lokalen Datei app.config laden. Zum Laden von WCF-Konfigurationsabschnitten, die auf WCF-Abschnitte in der Datei „machine.config“ oder in einer „web.config“-Stammdatei verweisen, ist die Berechtigung „ConfigurationPermission(Unrestricted)“ erforderlich. Ohne diese Berechtigung führen Verweise auf WCF-Konfigurationsabschnitte (Verhalten, Bindungen) außerhalb der lokalen Konfigurationsdatei zu einer Ausnahme, wenn die Konfiguration geladen wird.

Die eine Ausnahme ist die Konfiguration mit bekannten Typen für die Serialisierung, wie im Abschnitt über Serialisierung dieses Themas beschrieben.

Wichtig

Konfigurationserweiterungen werden nur bei der Ausführung im Modus "Voll vertrauenswürdig" unterstützt.

Diagnostik

Ereignisprotokollierung

In teilweise vertrauenswürdigen Umgebungen wird eine eingeschränkte Ereignisprotokollierung unterstützt. Nur Dienstaktivierungsfehler und Fehler bei der Ablaufverfolgung/Nachrichtenprotokollierung werden im Ereignisprotokoll protokolliert. Pro Prozess können maximal fünf Ereignisse protokolliert werden. Dadurch soll vermieden werden, dass zu viele Meldungen in das Ereignisprotokoll geschrieben werden.

Nachrichtenprotokollierung

Die Nachrichtenprotokollierung funktioniert nicht, wenn WCF in einer teilweise vertrauenswürdigen Umgebung ausgeführt wird. Wird sie in einer teilweise vertrauenswürdigen Umgebung aktiviert, schlägt zwar die Dienstaktivierung nicht fehl, jedoch wird keine Nachricht protokolliert.

Ablaufverfolgung

In einer Umgebung mit teilweisem Vertrauen ist die Funktionalität der Ablaufverfolgung nur eingeschränkt verfügbar. Dem Element <listeners> in der Konfigurationsdatei können Sie nur den Typ TextWriterTraceListener und den neuen Typ EventSchemaTraceListener hinzufügen. Die Verwendung des Standardtyps XmlWriterTraceListener führt möglicherweise zu unvollständigen oder falschen Protokollen.

Unterstützte Ablaufverfolgungsquellen sind:

Folgende Ablaufverfolgungsquellen werden nicht unterstützt:

Die folgenden Member der TraceOptions -Enumeration sollten nicht angegeben werden.

Wenn Sie die Ablaufverfolgung in einer teilweise vertrauenswürdigen Umgebung verwenden, dann stellen Sie sicher, dass die Anwendung über ausreichende Berechtigungen verfügt, um die Ausgabe des Ablaufverfolgungslisteners speichern zu können. Wenn Sie z. B. den TextWriterTraceListener verwenden, um die Ablaufverfolgungsausgabe in eine Textdatei zu schreiben, müssen Sie sicherstellen, dass die Anwendung über die notwendigen FileIOPermission-Berechtigungen verfügt, die für das Schreiben in die Ablaufverfolgungsdatei erforderlich sind.

Hinweis

Damit die Ablaufverfolgungsdateien nicht mit doppelten Fehlermeldungen überflutet werden, deaktiviert WCF die Ablaufverfolgung der Ressource oder Aktion nach dem ersten Sicherheitsfehler. Es gibt eine Ausnahmeablaufverfolgung für jeden fehlgeschlagenen Ressourcenzugriff, und zwar für den ersten Versuch, auf eine Ressource zuzugreifen oder eine Aktion auszuführen.

WCF-Diensthost

Der WCF-Diensthost unterstützt kein teilweises Vertrauen. Wenn Sie einen WCF-Dienst in einer teilweise vertrauenswürdigen Umgebung nutzen möchten, dürfen Sie zu dessen Erstellung nicht die Vorlage „WCF-Dienstbibliotheksprojekt“ in Visual Studio verwenden. Erstellen Sie stattdessen in Visual Studio eine neue Website, indem Sie die Vorlage „WCF-Dienstwebsite“ auswählen, die den Dienst auf einem Webserver hosten kann, auf dem die teilweise WCF-Vertrauenswürdigkeit unterstützt wird.

Weitere Einschränkungen

WCF ist im Allgemeinen auf die Sicherheitsüberlegungen beschränkt, die von der Hostanwendung auferlegt werden. Wenn WCF beispielsweise in einer XAML-Browseranwendung (XBAP) gehostet wird, gelten dafür die XBAP-Einschränkungen, die unter Windows Presentation Foundation (WPF)-Sicherheit mit teilweiser Vertrauenswürdigkeit beschrieben werden.

Die folgenden Zusatzfunktionen stehen nicht zur Verfügung, wenn indigo2 in einer teilweise vertrauenswürdigen Umgebung ausgeführt wird:

  • Windows-Verwaltungsinstrumentation (WMI)

  • Die Ereignisprotokollierung ist nur teilweise aktiviert (siehe Diskussion im Abschnitt Diagnose ).

  • Leistungsindikatoren

Die Verwendung von WCF-Features, die in einer teilweisen Vertrauensumgebung nicht unterstützt werden, kann zu Ausnahmen zur Laufzeit führen.

Nicht aufgeführte Funktionen

Die beste Möglichkeit herauszufinden, dass ein Informationsstück oder eine Aktion in einer teilweise vertrauenswürdigen Umgebung nicht verfügbar ist, besteht darin, innerhalb eines try-Blocks zu versuchen, auf die Ressource zuzugreifen oder die Aktion auszuführen, und dann den Fehlschlag mit catch zu behandeln. Damit die Ablaufverfolgungsdateien nicht mit doppelten Fehlermeldungen überflutet werden, deaktiviert WCF die Ablaufverfolgung der Ressource oder Aktion nach dem ersten Sicherheitsfehler. Es gibt eine Ausnahmeablaufverfolgung für jeden fehlgeschlagenen Ressourcenzugriff, und zwar für den ersten Versuch, auf eine Ressource zuzugreifen oder eine Aktion auszuführen.

Siehe auch