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

  1. 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.

  2. 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
    
  3. 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

  1. Créez une instance de la liaison.

  2. Définissez la propriété Mode sur Transport.

  3. Affectez à la propriété ClientCredential une valeur appropriée. L'exemple de code suivant affecte à la propriété la valeur Windows.

    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

  1. Créez une instance de la liaison.

  2. Définissez la propriété Mode sur Message.

  3. Affectez à la propriété ClientCredential une valeur appropriée. L'exemple de code suivant affecte à la propriété la valeur Certificate.

    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

  1. Ajoutez un élément de liaison approprié à l'élément <bindings> du fichier de configuration. L’exemple suivant ajoute un élément <wsHttpBinding>.

  2. Ajoutez un élément <binding>, puis affectez à son attribut name une valeur appropriée.

  3. Ajoutez un élément <security>, puis affectez à l'attribut mode les valeurs Message, Transportou TransportWithMessageCredential.

  4. 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'attribut clientCredentialType de l'élément <transport> la valeur Windows".

    <wsHttpBinding>
    <binding name="TransportSecurity">
        <security mode="Transport" >
           <transport clientCredentialType = "Windows" />
        </security>
    </binding>
    </wsHttpBinding >
    

    Vous pouvez également affecter au security mode la valeur Message", suivie d'un élément <"message">. Cet exemple affecte au clientCredentialType la valeur Certificate".

    <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