Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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, musspublicsein und über einenpublic-Konstruktor verfügen. Werden[OperationContract]-Methoden definiert, müssen diesepublicsein. Wird stattdessen eine[ServiceContract]-Schnittstelle implementiert, können diese Methodenimplementierungen explizit oderprivatesein, vorausgesetzt, die[ServiceContract]-Schnittstelle istpublic.Bei Verwendung des
[ServiceKnownType]-Attributs muss die angegebene Methodepublicsein.[MessageContract]-Klassen und ihre Mitglieder könnenpublicsein. Ist in der Anwendungsassembly die[MessageContract]-Klasse definiert, kann dieseinternalsein und Member vom Typinternalbesitzen.
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:
Der Textencoder (TextMessageEncodingBindingElement).
Der binäre Encoder (BinaryMessageEncodingBindingElement).
Der Web-Nachrichten-Encoder (WebMessageEncodingBindingElement).
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 alspublicdeklariert sein.Alle serialisierbaren
[DataMember]-Felder oder -Eigenschaften in einem[DataContract]-Typ müssen öffentlich sein und Schreib-/Lesezugriff besitzen. Die Serialisierung und Deserialisierung vonreadonly-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:
System.IdentityModel.Claims, System.IdentityModel.Policy, System.IdentityModel.Selectors und System.IdentityModel.Tokens.
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.