Compatibilité des fonctionnalités dans un environnement de confiance partielle
Windows Communication Foundation (WCF) prend en charge un sous-ensemble limité de fonctionnalités lors de son exécution dans un environnement de confiance partielle. Les fonctionnalités de confiance partielle prises en charge sont conçues autour d'un ensemble spécifique de scénarios comme décrit dans la rubrique Scénarios de déploiement pris en charge.
Autorisations minimales requises
WCF prend en charge un sous-ensemble de fonctionnalités dans les applications qui s'exécutent sous les jeux d'autorisations nommés standard suivants :
Autorisations de confiance moyenne
Autorisations de la zone Internet
Toute tentative d'utilisation de WCF dans des applications de confiance partielle avec des autorisations plus restrictives peut provoquer des exceptions de sécurité au cours de l'exécution.
Contrats
Les contrats sont soumis aux restrictions suivantes lors de leur exécution dans un environnement de confiance partielle :
La classe de service qui implémente l'interface
[ServiceContract]
doit être public et doit avoir un constructeur public. Si elle définit des méthodes[OperationContract]
, celles-ci doivent être public. Si, au lieu de cela, elle implémente une interface[ServiceContract]
, ces implémentations de méthode peuvent être explicites ou private, pourvu que l'interface[ServiceContract]
soit public.Lors de l'utilisation de l'attribut
[ServiceKnownType]
, la méthode spécifiée doit être public.Les classes
[MessageContract]
et leurs membres peuvent être public. Si la classe[MessageContract]
est définie dans l'assembly d'application, elle peut être internal et avoir des membres internal.
Liaisons fournies par le système
BasicHttpBinding et WebHttpBinding sont totalement pris en charge dans un environnement de confiance partielle. WSHttpBinding est pris en charge uniquement pour le mode de sécurité Transport.
Les liaisons qui utilisent des transports autres que HTTP, comme NetTcpBinding, NetNamedPipeBinding ou NetMsmqBinding, ne sont pas prises en charge lors de l'exécution dans un environnement de confiance partielle.
Liaisons personnalisées
Les liaisons personnalisées peuvent être créées et utilisées dans un environnement de confiance partielle, mais elles doivent respecter les restrictions décrites dans cette section.
Transports
Les seuls éléments de liaison de transport autorisés sont HttpTransportBindingElement et HttpsTransportBindingElement.
Encodeurs
Les encodeurs suivants sont autorisés :
Encodeur de texte (TextMessageEncodingBindingElement).
Encodeur binaire (BinaryMessageEncodingBindingElement).
Encodeur de message Web (WebMessageEncodingBindingElement).
Les encodeurs MTOM (Message Transmission Optimization Mechanism) ne sont pas pris en charge.
Sécurité
Les applications de confiance partielle peuvent utiliser les fonctionnalités de sécurité au niveau du transport de WCF pour sécuriser leur communication. La sécurité au niveau message n'est pas prise en charge. La configuration d'une liaison pour utiliser la sécurité au niveau message entraîne une exception pendant l'exécution.
Liaisons non prises en charge
Les liaisons qui utilisent une messagerie fiable, des transactions ou une sécurité au niveau du message ne sont pas prises en charge.
Sérialisation
Le DataContractSerializer et le XmlSerializer sont pris en charge dans un environnement de confiance partielle. Toutefois, l'utilisation du DataContractSerializer est soumise aux conditions suivantes :
Tous les types
[DataContract]
sérialisables doivent être public.Tous les champs ou les propriétés
[DataMember]
sérialisables dans un type[DataContract]
doivent être "public" et en lecture/écriture. La sérialisation et la désérialisation des champs en lecture seule n'est pas prise en charge lors de l'exécution de WCF dans une application de confiance partielle.Le modèle de programmation
[Serializable]
/ISerializable n'est pas pris en charge dans un environnement de confiance partielle.Les types connus doivent être spécifiés dans le code ou la configuration au niveau de l'ordinateur (machine.config). Les types connus ne peuvent pas être spécifiés dans la configuration au niveau de l'application pour des raisons de sécurité.
Les types qui implémentent IObjectReference lèvent une exception dans un environnement de confiance partielle.
Consultez la section Sérialisation de Meilleures pratiques dans un environnement de confiance partielle pour plus d'informations sur la sécurité en cas d'utilisation de DataContractSerializer dans une application de confiance partielle.
Types de collection
Certains types de collection implémentent IEnumerable et IEnumerable. Les exemples incluent des types qui implémentent ICollection. Ces types peuvent mettre en œuvre une implémentation public de GetEnumerator()
et une implémentation explicite de GetEnumerator()
. Dans ce cas, DataContractSerializer appelle l'implémentation public de GetEnumerator()
et non l'implémentation explicite de GetEnumerator()
. Si aucune des implémentations GetEnumerator()
n'est public et que toutes sont des implémentations explicites, alors l'objet DataContractSerializer
appelle IEnumerable.GetEnumerator()
.
Pour les types de collection, lorsque WCF s'exécute dans un environnement de confiance partielle, si aucune des implémentations GetEnumerator()
n'est public ou si aucune n'est une implémentation d'interface explicite, une exception de sécurité est levée.
NetDataContractSerializer
De nombreux types de collection .NET Framework, tels que List, ArrayList, Dictionary et Hashtable ne sont pas pris en charge par le NetDataContractSerializer dans l'environnement de confiance partielle. L'attribut [Serializable]
de ces types est défini et, comme indiqué précédemment à la section Sérialisation, cet attribut n'est pas pris en charge dans un environnement de confiance partielle. Le DataContractSerializer traite les collections de manière spéciale et peut ainsi contourner cette restriction ; en revanche, le NetDataContractSerializer n'a pas de tel mécanisme pour contourner cette restriction.
Le type DateTimeOffset n'est pas pris en charge par le NetDataContractSerializer dans un environnement de confiance partielle.
Il n'est pas possible d'utiliser un substitut avec le NetDataContractSerializer (à l'aide du mécanisme SurrogateSelector) lors de son exécution dans un environnement de confiance partielle. Notez que cette restriction s'applique à l'utilisation d'un substitut, pas à sa sérialisation.
Activation de l'exécution des comportements courants
Les comportements de service ou de point de terminaison non marqués avec l'attribut AllowPartiallyTrustedCallersAttribute (APTCA) qui sont ajoutés à la section <commonBehaviors> d'un fichier de configuration ne sont pas exécutés lorsque l'application s'exécute dans un environnement de confiance partielle, et aucune exception n'est levée lorsque cela se produit. Pour appliquer l'exécution des comportements courants, vous devez effectuer l'une des actions suivantes :
Marquez votre comportement courant avec l'attribut AllowPartiallyTrustedCallersAttribute afin qu'il soit exécuté lorsqu'il est déployé comme une application de confiance partielle. Notez qu'une entrée de Registre peut être définie sur l'ordinateur pour interdire l'exécution des assemblys marqués avec l'attribut APTCA. .
Si l'application est déployée comme une application de confiance partielle, vérifiez que les utilisateurs ne peuvent pas modifier les paramètres de sécurité d'accès du code pour exécuter l'application dans un environnement de confiance partielle. S'ils peuvent le faire, le comportement ne s'exécute pas et aucune exception n'est levée. Pour y veiller, consultez l'option levelfinal à l'aide de l'Code Access Security Policy Tool (Caspol.exe).
Pour obtenir un exemple de un comportement courant, consultez Comment : verrouiller des points de terminaison dans l'entreprise.
Configuration
À une exception, le code d'un niveau de confiance partielle ne peut charger que les sections de configuration WCF dans le fichier app.config
local. Pour charger des sections de configuration WCF qui référencent des sections WCF dans machine.config ou dans une racine, le fichier web.config requiert une autorisation ConfigurationPermission(Unrestricted). Sans cette autorisation, les références aux sections de configuration WCF (comportements, liaisons) en dehors des résultats de fichier de configuration local aboutissent à une exception lorsque la configuration est chargée.
L'unique exception est la configuration de type connu pour la sérialisation, comme décrit à la section Sérialisation de cette rubrique.
Remarque : |
---|
Les extensions de configuration ne sont prises en charge que lors de l'exécution à un niveau de confiance totale. |
Diagnostics
Journalisation des événements
La journalisation des événements limitée est prise en charge dans un environnement de confiance partielle. Seul les échecs d'activation de service et les échecs de suivi/journalisation de message sont consignés dans le journal des événements. Le nombre d'événements maximal qui peuvent être enregistrés par un processus est égal à 5, pour éviter d'écrire un trop grand nombre de messages dans le journal des événements.
Enregistrement des messages
L'enregistrement des messages ne fonctionne pas lorsque WCF est exécuté dans un environnement de confiance partielle. En cas d'activation avec un niveau de confiance partiel, il ne met pas en échec l'activation du service, mais aucun message n'est enregistré.
Traçage
Des fonctionnalités de traçage restreintes sont disponibles lors de l'exécution dans un environnement de confiance partielle. Dans l'élément <listeners> du fichier de configuration, les seuls types que vous pouvez ajouter sont TextWriterTraceListener et le nouveau EventSchemaTraceListener. L'utilisation de XmlWriterTraceListener standard peut provoquer des journaux incomplets ou incorrects.
Les sources de suivi prises en charge sont :
System.IdentityModel.Claims, System.IdentityModel.Policy, System.IdentityModel.Selectors et System.IdentityModel.Tokens.
Les sources de suivi suivantes ne sont pas prises en charge :
CardSpace
Les membres suivants de l'énumération TraceOptions ne doivent pas être spécifiés:
Lors de l'utilisation du traçage dans un environnement de confiance partielle, assurez-vous que l'application dispose des autorisations nécessaires pour stocker la sortie de l'écouteur de trace. Par exemple, lors de l'utilisation de TextWriterTraceListener pour écrire le résultat du traçage dans un fichier texte, assurez-vous que l'application bénéficie de l'autorisation FileIOPermission requise pour écrire dans le fichier de trace.
Remarque : |
---|
Pour éviter de saturer les fichiers de trace avec des erreurs en double, WCF désactive le traçage de la ressource ou de l'action après le premier échec de sécurité. Une trace d'exception est créée pour chaque échec de l'accès aux ressources lors de la première tentative d'accès à la ressource ou d'accomplissement de l'action. |
Hôte de service WCF
L'hôte de service WCF ne prend pas en charge la confiance partielle. Si vous souhaitez utiliser un service WCF dans un environnement de confiance partielle, n'utilisez pas le modèle du projet de bibliothèque de service WCF dans Visual Studio pour générer votre service. Créez plutôt un site Web dans Visual Studio en choisissant le modèle de site Web du service WCF, qui peut héberger le service sur un serveur Web sur lequel la confiance partielle WCF est prise en charge.
Autres limitations
WCF est en général limité par les considérations de sécurité imposées par l'application d'hébergement. Par exemple, si WCF est hébergé dans une application du navigateur XAML (XBAP), il est soumis aux limitations XBAP, comme décrit dans Sécurité de confiance partielle de Windows Presentation Foundation (page pouvant être en anglais).
Les fonctionnalités supplémentaires suivantes ne sont pas activées en cas d'exécution d'indigo2 dans un environnement de confiance partielle :
WMI (Windows Management Instrumentation)
La journalisation des événements n'est activée que partiellement (consultez la discussion dans la section Diagnostics).
Compteurs de performance
L'utilisation des fonctionnalités WCF qui ne sont pas prises en charge dans un environnement de confiance partielle peut provoquer des exceptions pendant l'exécution.
Fonctionnalités non répertoriées
La meilleure méthode pour découvrir qu'une information ou qu'une action n'est pas disponible en cas d'exécution dans un environnement de confiance partielle est d'essayer d'accéder à la ressource ou d'exécuter l'action dans un bloc try, puis d'intercepter l'échec via catch. Pour éviter de saturer les fichiers de trace avec des erreurs en double, WCF désactive le traçage de la ressource ou de l'action après le premier échec de sécurité. Une trace d'exception est créée pour chaque échec de l'accès aux ressources lors de la première tentative d'accès à la ressource ou d'accomplissement de l'action.
Voir aussi
Référence
HttpTransportBindingElement
HttpsTransportBindingElement
TextMessageEncodingBindingElement
WebMessageEncodingBindingElement
Concepts
Scénarios de déploiement pris en charge
Meilleures pratiques dans un environnement de confiance partielle