WCF - Sécurité

Un service WCF se vante d'un système de sécurité robuste avec deux modes ou niveaux de sécurité afin que seul un client prévu puisse accéder aux services. Les menaces de sécurité courantes dans une transaction distribuée sont modérées dans une large mesure par WCF.

Principales caractéristiques de sécurité

Le service WCF a quatre fonctionnalités de sécurité clés, comme illustré dans la figure ci-dessous.

  • Authentication - Ici, l'authentification ne se limite pas à l'identification de l'expéditeur du message, mais est mutuelle, c'est-à-dire que l'authentification du destinataire du message est nécessaire pour exclure la possibilité de toute sorte d'attaque intermédiaire.

  • Authorization- Il s'agit de la prochaine étape prise par un service WCF pour assurer la sécurité et il est ici déterminé si le service doit autoriser l'appelant à continuer ou non. Bien que l'autorisation ne dépende pas de l'authentification, elle suit normalement l'authentification.

  • Confidentiality- L'échange d'informations entre un appelant et un service est gardé confidentiel afin de restreindre son interprétation par d'autres à qui le message n'est pas destiné. Pour rendre cela possible, le cryptage est utilisé avec une grande variété d'autres mécanismes.

  • Integrity - Le dernier concept clé est le maintien de l'intégrité, c'est-à-dire l'assurance que le message n'a pas été falsifié par quiconque au cours de son trajet de l'expéditeur au destinataire.

Transfert du mode de sécurité

WCF propose les modes de sécurité de transfert suivants pour garantir une communication sécurisée entre un client et un serveur. Les divers modes de sécurité de transfert sont mentionnés ci-dessous.

  • None- Ce mode ne garantit aucun type de sécurité des messages et le service n'obtient aucune information d'identification sur le client. Ce mode est très risqué, car il peut permettre la falsification des messages et n'est donc pas recommandé.

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "None"/>
   </binding>
</wsHttpBinding>
  • Transport- Ce mode est le moyen le plus simple de réaliser un transfert sécurisé de message via l'utilisation de protocoles de communication tels que TCP, IPC, Https et MSMQ. Ce mode est plus efficace lorsque le transfert est point à point et est principalement utilisé dans un environnement contrôlé, c'est-à-dire des applications intranet.

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "Transport"/>
   </binding>
</wsHttpBinding>
  • Message- Le mode de sécurité permet une authentification mutuelle et offre une grande confidentialité car les messages sont cryptés et peuvent être transportés via http, qui n'est pas considéré comme un protocole sécurisé. Ici, la sécurité est fournie de bout en bout sans tenir compte du nombre d'intermédiaires impliqués dans un transfert de message et s'il existe un transport sécurisé ou non. Le mode est généralement utilisé par les applications Internet.

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "Message"/>
   </binding>
</wsHttpBinding>
  • Mixed - Ce mode de sécurité n'est pas utilisé fréquemment et l'authentification client n'est proposée qu'au niveau client.

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "TransportWithMessageCredential"/>
   </binding>
</wsHttpBinding>
  • Both- Ce mode de sécurité comprend à la fois la sécurité du transport et la sécurité des messages pour offrir une couverture de sécurité robuste, mais entraîne souvent une surcharge des performances globales. Celui-ci est pris en charge uniquement par MSMQ.

<netMsmqBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "Both"/>
   </binding>
</netMsmqBinding>

Toutes les liaisons WCF, à l'exception de BasicHttpBinding, ont une certaine sécurité de transfert par défaut.

Niveau de sécurité des messages

La sécurité au niveau des messages ne dépend pas des protocoles WCF. Il est utilisé avec les données de message elles-mêmes en chiffrant les données à l'aide d'un algorithme standard. Un certain nombre d'informations d'identification client sont disponibles pour différentes liaisons pour le niveau de sécurité des messages et elles sont décrites ci-dessous.

Client credentials for message level security in WCF

None- Ici, le cryptage est utilisé pour sécuriser le message, alors qu'aucune authentification client n'est effectuée, ce qui signifie que le service est accessible par un client anonyme. À l'exception de BasicHttpBinding, toutes les liaisons WCF prennent en charge ces informations d'identification client. Cependant, il convient de noter que pour NetNamedPipeBinding, ces informations d'identification client ne sont pas du tout disponibles.

  • Windows- Ici, le cryptage des messages et l'authentification client ont lieu pour un utilisateur connecté en temps réel. Dans ce cas également, contrairement à toutes les autres liaisons WCF, NetNamedPipeBinding n'est pas disponible et BasicHttpBinding ne prête pas sa prise en charge.

  • UserName- Ici, les messages sont cryptés et sécurisés en offrant un nom d'utilisateur, et les clients sont authentifiés car ils doivent offrir un mot de passe. BasicHttpBinding, tout comme les deux informations d'identification client ci-dessus, ne prend pas en charge UserName et n'est pas disponible pour NetNamedPipeBinding.

  • Certificate- En plus du cryptage des messages, le client et le service obtiennent une authentification avec certificat. Ces informations d'identification client sont disponibles et sont prises en charge par toutes les liaisons WCF à l'exception de NetNamedPipeBinding.

  • IssuedToken- Les jetons émis par une autorité comme Cardspace sont utilisés pour authentifier les messages. Le cryptage des messages est également effectué ici.

Le code suivant montre comment les informations d'identification du client sont configurées dans le niveau / mode de sécurité des messages WCF.

<netTcpBinding>
   <binding name = "WCFMessageSecurityExample">
      <security mode = "Message">
         <message clientCredentialType = "None"/>
      </security>   
   </binding>
</netTcpBinding>

<netMsmqBinding>...</netMsmqBinding>
</bindings>
<behaviors>...</behaviors>

Ici, il faut noter que le mode de sécurité de transport a un avantage sur le niveau de sécurité des messages, car le premier est plus rapide. Il ne nécessite aucun codage supplémentaire et offre une prise en charge d'interopérabilité, et ne réduit donc pas les performances globales.

Cependant, du point de vue de la sécurité, le mode de sécurité des messages est plus robuste et indépendant des protocoles et offre une sécurité de bout en bout.