Procédure : définir le mode de sécurité
La sécurité Windows Communication Foundation (WCF) comprend trois modes de sécurité courants qui se trouvent sur la plupart des liaisons prédéfinies : transport, message et « transport avec informations d’identification du message ». Deux modes supplémentaires sont spécifiques à deux liaisons : le mode « transport-credential only » trouvé sur le BasicHttpBinding, et le mode « Both », trouvé sur le 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 la sécurité WCF, consultez Vue d’ensemble de la sécurité, Sécurisation des services et Sécurisation des services et des clients. Pour plus d’informations sur le mode de transport et le message, consultez Sécurité du transport et Sécurité des messages.
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 la 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
.WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Transport;
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Transport
Vous pouvez également affecter la valeur message au mode, comme illustré dans l'exemple de code suivant.
WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Message;
Dim b As 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.
WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.TransportWithMessageCredential;
Dim b As 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.
WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);
Dim b As 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.
Définissez la propriété
Mode
surTransport
.Affectez à la propriété
ClientCredential
une valeur appropriée. L'exemple de code suivant affecte à la propriété la valeurWindows
.WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Transport; b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
Dim b As 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.
Définissez la propriété
Mode
surMessage
.Affectez à la propriété
ClientCredential
une valeur appropriée. L'exemple de code suivant affecte à la propriété la valeurCertificate
.WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Message; b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
Dim b As 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 attributname
une valeur appropriée.Ajoutez un élément
<security>
, puis affectez à l'attributmode
les valeursMessage
,Transport
ouTransportWithMessageCredential
.Si le mode a la valeur
Transport
, ajoutez un élément<transport>
, puis affectez à l'attributclientCredential
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.