Comment : définir le mode de sécurité
La sécurité Windows Communication Foundation (WCF) propose trois modes de sécurité standard disponibles sur la plupart des liaisons prédéfinies : transport, message et transport avec informations d'identification de message. Il existe également deux modes supplémentaires propres à deux liaisons particulières. Il s'agit du mode « informations d'identification de transport uniquement » disponible sur la liaison BasicHttpBinding et du mode « les deux » disponible sur la liaison NetMsmqBinding. Cette rubrique traite essentiellement des trois principaux modes de sécurité : Transport, Message et TransportWithMessageCredential.
Remarque : toutes les liaisons prédéfinies ne prennent pas nécessairement en charge chacun de ces modes. Cette rubrique, dans laquelle le mode est défini à l'aide des classes WSHttpBinding et NetTcpBinding, illustre comment définir les modes de sécurité à l'aide d'un programme ou dans la configuration.
Pour plus d'informations sur le sujet suivant WCF la sécurité, consultez Vue d'ensemble de la sécurité, Sécurisation de services et Sécurisation des services et des clients. Pour plus d'informations sur le sujet suivant les modes de sécurité de niveaux transport et/ou message, consultez Sécurité de transport et Sécurité des messages dans WCF.
Pour définir le mode de sécurité dans le code
Créez une instance de la classe de liaison en cours d'utilisation. Pour obtenir une liste des liaisons prédéfinies, consultez Liaisons fournies par le système. Cet exemple de code crée une instance de la classe WSHttpBinding.
Définissez la propriété Mode de l'objet retourné par la propriété Security.
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Transport
WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Transport;
Vous pouvez également affecter la valeur message au mode, comme illustré dans l'exemple de code suivant.
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Message
WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Message;
Vous pouvez aussi affecter la valeur transport avec informations d'identification de message au mode, comme illustré dans l'exemple de code suivant.
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.TransportWithMessageCredential
WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.TransportWithMessageCredential;
Vous pouvez enfin définir le mode dans le constructeur de la liaison, comme illustré dans l'exemple de code suivant.
Dim b As New WSHttpBinding(SecurityMode.Message)
WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);
Définition de la propriété ClientCredentialType
La définition de la propriété ClientCredentialType dépend de la valeur affectée au mode de sécurité. Par exemple, si vous utilisez la classe WSHttpBinding et affectez au mode la valeur Transport vous devez affecter à la propriété ClientCredentialType de la classe HttpTransportSecurity une valeur appropriée.
Pour définir la propriété ClientCredentialType pour le mode de sécurité de niveau transport
Créez une instance de la liaison.
Affectez la valeur Transport à la propriété Mode.
Affectez à la propriété ClientCredential une valeur appropriée. L'exemple de code suivant affecte à la propriété la valeur Windows.
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Transport b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Transport; b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
Pour définir la propriété ClientCredentialType pour le mode de sécurité de niveau message
Créez une instance de la liaison.
Affectez la valeur Message à la propriété Mode.
Affectez à la propriété ClientCredential une valeur appropriée. L'exemple de code suivant affecte à la propriété la valeur Certificate.
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Message b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate
WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Message; b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
Pour définir le mode et la propriété ClientCredentialType dans la configuration
Ajoutez un élément de liaison approprié à l'élément <bindings> du fichier de configuration. L'exemple suivant ajoute un élément <wsHttpBinding>.
Ajoutez un élément
<binding>
, puis affectez à son attribut name une valeur appropriée.Ajoutez un élément
<security>
, puis affectez à l'attribut mode les valeurs Message, Transportou TransportWithMessageCredential.Si le mode a la valeur Transport, ajoutez un élément
<transport>
, puis affectez à l'attribut clientCredential une valeur appropriée.L'exemple suivant affecte au mode la valeur
Transport"
, puis affecte à l'attributclientCredentialType
de l'élément<transport>
la valeurWindows"
.<wsHttpBinding> <binding name="TransportSecurity"> <security mode="Transport" /> <transport clientCredentialType = "Windows" /> </security> </binding> </wsHttpBinding >
Vous pouvez également affecter au
security mode
la valeurMessage"
, suivie d'un élément<"message">
. Cet exemple affecte auclientCredentialType
la valeurCertificate"
.<wsHttpBinding> <binding name="MessageSecurity"> <security mode="Message" /> <message clientCredentialType = "Certificate" /> </security> </binding> </wsHttpBinding >
L'utilisation de la valeur TransportWithMessageCredential forme un cas à part, expliqué ci-dessous.
Utilisation de TransportWithMessageCredential
Lorsque vous affectez au mode de sécurité la valeur TransportWithMessageCredential, le mécanisme chargé d'offrir la sécurité de niveau transport dépend du transport utilisé. Par exemple, le protocole HTTP utilise la sécurité Secure Sockets Layer (SSL) sur HTTP, c'est-à-dire HTTPS. Par conséquent, la définition d'une propriété ClientCredentialType pour tout objet de sécurité de transport (tel que HttpTransportSecurity) sera sans effet. En d'autres termes, vous pouvez uniquement définir la propriété ClientCredentialType de l'objet de sécurité de message (pour la liaison WSHttpBinding, il s'agit de l'objet NonDualMessageSecurityOverHttp).
Pour plus d'informations, consultez Comment : utiliser des informations d'identification de sécurité de transport et de message.
Voir aussi
Tâches
Comment : configurer un port avec un certificat SSL
Comment : utiliser des informations d'identification de sécurité de transport et de message
Concepts
Sécurité des messages dans WCF
Vue d'ensemble de la sécurité
Liaisons fournies par le système
Autres ressources
Sécurité de transport
<security> of <wsHttpBinding>
<security> of <basicHttpBinding>
<security> of <netTcpBinding>