Funktionskompatibilität für teilweise Vertrauenswürdigkeit

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 strikteren 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 Member können publicsein. 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 teilweise vertrauenswürdigen 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.

Transportprotokolle

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. Wenn eine Bindung für die Nutzung von Sicherheit auf Nachrichtenebene konfiguriert wird, löst dies zur Laufzeit eine Ausnahme aus.

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.

Auflistungstypen

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, sondern es sich bei allen um explizite Implementierungen handelt, ruft DataContractSerializerIEnumerable.GetEnumerator()auf.

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

NetDataContractSerializer

Viele .NET Framework-Auflistungstypen (wie List<T>, ArrayList, Dictionary<TKey,TValue> und Hashtable ) werden vom NetDataContractSerializer in teilweise vertrauenswürdigen Umgebungen 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, weshalb diese Einschränkung von ihm umgangen werden kann, NetDataContractSerializer verfügt jedoch über keine Möglichkeit zum Umgehen dieser Einschränkung.

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

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

Aktivieren von gemeinsamem Verhalten für die 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 Verhalten zu erzwingen, müssen Sie einen der beiden folgenden Schritte ausführen:

  • 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 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 Ausnahme ist die Konfiguration für die Serialisierung mit bekannten Typen, wie im Serialisierungsabschnitt dieses Themas beschrieben.

Wichtig

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

Diagnose

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 teilweise vertrauenswürdigen Umgebung ist nur eine eingeschränkte Funktionalität der Ablaufverfolgung 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 keine teilweise Vertrauenswürdigkeit. 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 wird allgemein auf die Sicherheitsüberlegungen eingeschrä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, Windows Management Instrumentation)

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

  • Leistungsindikatoren

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

Nicht aufgeführte Funktionen

Die beste Möglichkeit festzustellen, ob in einer teilweise vertrauenswürdigen Umgebung auf eine bestimmte Ressource zugegriffen oder eine Aktion ausgeführt werden kann, besteht darin, innerhalb eines try -Blocks auf die Ressource zuzugreifen oder die Aktion auszuführen, und dann einen möglichen Fehlschlag mit catch abzufangen. 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.

Weitere Informationen