Exemple de sécurité des services Web (WS) avec SOAP

⚡ Résumé intelligent

La sécurité des services Web (WS) est une norme qui protège les données échangées lors d'un appel à un service Web SOAP. Cette ressource explique les menaces de sécurité et les contre-mesures, les normes WS-Security, la création d'un service Web sécurisé avec des identifiants et les bonnes pratiques en matière de sécurité des services Web.

  • (I.e. Norme de base : WS-Security ajoute une couche de sécurité à SOAP, définissant comment les informations d'identification et les clés de chiffrement circulent dans l'en-tête SOAP.
  • 🌐 Limites HTTPS : Le protocole HTTPS/SSL sécurise le trafic point à point, mais dans les flux multi-serveurs, seul WS-Security assure la protection du message de bout en bout.
  • 🎫 Jetons d'identification : Les informations d'identification sont transmises à l'aide d'un UsernameToken pour le nom d'utilisateur et le mot de passe, ou d'un BinarySecurityToken pour les certificats Kerberos ou X.509.
  • Exemple de construction sécurisée : Un service Web .Net ASMX ajoute une classe AuthHeader afin que l'en-tête SOAP contienne un nom d'utilisateur et un mot de passe pour l'authentification.
  • 📋 Meilleures pratiques : Demandes d'audit et de journalisation, track opérations commerciales, authentifiez-vous correctement et ne stockez ni n'enregistrez jamais d'informations d'identification sensibles.

Sécurité des services Web

Qu’est-ce que la sécurité WS ?

WS Security est une norme qui garantit la sécurité des données échangées dans le cadre d'un service Web. Cette fonctionnalité clé de SOAP explique sa grande popularité pour la création de services Web.

La sécurité est un élément essentiel de toute application web. Étant donné que la quasi-totalité des applications web sont exposées à Internet, le risque de menaces de sécurité est constant. Par conséquent, lors du développement…ping Pour les applications web, il est toujours recommandé de s'assurer que la sécurité est prise en compte dès la conception et le développement.

Menaces de sécurité et contre-mesures

Pour comprendre les menaces de sécurité qui peuvent peser sur une application web, examinons un scénario simple d'application web et voyons comment elle fonctionne en matière de sécurité.

L'une des mesures de sécurité disponibles pour HTTP est le protocole HTTPS. HTTPS est un moyen sécurisé de communication entre le client et le serveur sur Internet. Il utilise le protocole SSL (Secure Sockets Layer) pour garantir la sécurité des échanges. Le client et le serveur possèdent chacun un certificat numérique permettant de s'authentifier lors de toute communication.

Menaces de sécurité et contre-mesures HTTPS

Dans une communication HTTPS standard entre le client et le serveur, les étapes suivantes se déroulent :

  1. Le client envoie une requête au serveur via le certificat client. Lorsque le serveur voit le certificat client, il prend une note dans son système de cache afin de savoir que la réponse ne doit retourner qu'à ce client.
  2. Le serveur s'authentifie ensuite auprès du client en envoyant son certificat. Cela garantit que le client communique avec le bon serveur.
  3. Toutes les communications ultérieures entre le client et le serveur sont chiffrées. Ainsi, si des tiers tentent de contourner la sécurité et d'accéder aux données, ils ne pourront pas les lire car elles seront chiffrées.

Cependant, ce type de sécurité ne convient pas à toutes les situations. Il peut arriver qu'un client communique avec plusieurs serveurs. L'exemple ci-dessous illustre un client communiquant simultanément avec une base de données et un serveur web. Dans ce cas, toutes les informations ne peuvent pas transiter par le protocole HTTPS.

Menaces de sécurité et contre-mesures pour plusieurs serveurs

C’est là que SOAP intervient pour surmonter ces obstacles grâce à la spécification WS Security. Avec cette spécification, toutes les données relatives à la sécurité sont définies dans l’élément d’en-tête SOAP. Cet élément d’en-tête peut contenir les informations suivantes :

  1. Si le message dans le corps SOAP a été signé avec une clé de sécurité, cette clé peut être définie dans l'élément d'en-tête.
  2. Si un élément quelconque du corps SOAP est chiffré, l'en-tête contiendra les clés de chiffrement nécessaires pour que le message puisse être déchiffré lorsqu'il atteindra sa destination.

Dans un environnement à serveurs multiples, la technique d'authentification SOAP décrite ci-dessus présente l'avantage suivant :

  • Le corps SOAP étant chiffré, il ne pourra être déchiffré que par le serveur Web qui héberge le service Web. Cela est dû à la façon dont le protocole SOAP est conçu.
  • Supposons que le message soit transmis au serveur de base de données via une requête HTTP ; il ne peut pas être déchiffré car la base de données ne dispose pas des mécanismes nécessaires.
  • Ce n'est que lorsque la requête parviendra effectivement au serveur Web sous forme de protocole SOAP que celui-ci pourra déchiffrer le message et renvoyer la réponse appropriée au client.

Nous verrons dans les rubriques suivantes comment la norme WS Security peut être utilisée pour SOAP.

Normes de sécurité des services Web

Comme indiqué précédemment, la norme WS-Security repose sur l'inclusion de la définition de sécurité dans l'en-tête SOAP. Les informations d'identification dans l'en-tête SOAP sont gérées de deux manières.

Premièrement, il définit un élément spécial appelé UsernameToken. Celui-ci sert à transmettre le nom d'utilisateur et le mot de passe au service web. L'autre méthode consiste à utiliser un jeton binaire via BinarySecurityToken. Ce type de jeton est utilisé lorsque des techniques de chiffrement telles que Kerberos ou X.509 sont mises en œuvre.

Le diagramme ci-dessous illustre le fonctionnement du modèle de sécurité dans WS Security.

Flux de travail des normes de sécurité des services Web

Vous trouverez ci-dessous les étapes qui se déroulent dans le flux de travail décrit ci-dessus :

  1. Une requête peut être envoyée depuis le client du service Web vers le service d'émission d'e-mails de sécurité. Ce service peut être un service Web intermédiaire conçu spécifiquement pour fournir des identifiants (nom d'utilisateur/mot de passe) ou des certificats au service Web SOAP.
  2. Le jeton de sécurité est ensuite transmis au client du service Web.
  3. Le client du service Web appelle ensuite le service Web, mais en veillant cette fois à ce que le jeton de sécurité soit intégré dans le message SOAP.
  4. Le service Web comprend alors le message SOAP avec le jeton d'authentification et peut alors contacter le service Security Token pour voir si le jeton de sécurité est authentique ou non.

L'extrait ci-dessous illustre le format de la partie authentification du document WSDL. D'après cet extrait, le message SOAP contiendra deux éléments supplémentaires : le nom d'utilisateur et le mot de passe.

<xs:element name="UsernameToken">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="Username"/>
         <xs:element ref="Password" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="Id" type="xs:ID"/>
   </xs:complexType>
</xs:element>

Lors de l'échange effectif d'un message SOAP entre le client et le serveur, la partie du message contenant les informations d'identification de l'utilisateur peut ressembler à celle illustrée ci-dessus. L'élément « wsse » est un élément spécifique à SOAP et indique qu'il contient des informations de sécurité.

Comment créer des services Web sécurisés

Examinons maintenant un exemple de sécurité de service web SOAP. Nous allons construire un système de sécurité de service web à partir de l'exemple présenté précédemment dans ce chapitre et y ajouter une couche de sécurité.

Dans cet exemple, nous allons créer un service web simple qui renverra une chaîne de caractères à l'application appelante. Cette fois-ci, lors de l'appel, des informations d'identification devront être fournies au service appelant. Suivez les étapes ci-dessous pour créer notre service web SOAP et y ajouter la définition de sécurité.

Étape 1) La première étape consiste à créer un vide Asp.Net Application Web. Depuis Visual Studio 2013, cliquez sur l'option de menu Fichier->Nouveau projet.

Nouveau projet : Créer des services Web sécurisés

Une fois que vous avez cliqué sur l'option Nouveau projet, Visual Studio vous proposera alors une autre boîte de dialogue pour choisir le type de projet et donner les détails nécessaires du projet. Ceci est expliqué à l’étape suivante.

Étape 2) Dans cette étape,

  1. Assurez-vous de choisir d'abord le C# Modèle web pour application web ASP.NET. Ce type de projet est requis pour créer un projet de services web. En choisissant cette option, Visual Studio effectuera les étapes nécessaires pour ajouter les fichiers requis par toute application web.
  2. Donnez un nom à votre projet qui dans notre cas a été donné comme «service web.asmxEnsuite, veillez à indiquer l'emplacement où seront stockés les fichiers du projet.

Détails du projet de création de services Web sécurisés

Une fois l'opération terminée, vous verrez le fichier projet créé dans l'explorateur de solutions de Visual Studio 2013.

Explorateur de solutions de services Web sécurisés

Étape 3) Dans cette étape, nous allons ajouter un fichier de service Web à notre projet.

  1. Tout d'abord, cliquez avec le bouton droit sur le fichier de projet comme indiqué ci-dessous.

Créer un projet de services Web sécurisés (clic droit)

  1. Après avoir cliqué avec le bouton droit sur le fichier de projet, vous pouvez sélectionner l'option « Ajouter > Service Web (ASMX) » pour ajouter un fichier de service Web. Nommez ce fichier « Service Tutoriel ».

Créer des services Web sécurisés ajouter un service Web

L'étape précédente affichera une boîte de dialogue vous permettant de saisir le nom du fichier de service web. Dans cette boîte de dialogue, saisissez « TutorialService » comme nom de fichier.

Boîte de dialogue de création de services Web sécurisés

Étape 4) Ajoutez le code suivant à votre fichier asmx de service de didacticiel. L'extrait de code ci-dessous est utilisé pour ajouter une classe personnalisée qui sera utilisée pour modifier l'en-tête SOAP lorsque le message SOAP est généré. Puisque nous souhaitons maintenant ajouter des informations d'identification de sécurité à l'en-tête SOAP, cette étape est requise.

Créer un code d'en-tête d'authentification pour les services Web sécurisés

      return "This is a Guru99 Web Service";
   }

   public class AuthHeader : SoapHeader
   {
      public string UserName;
      public string Password;
   }
}

Code Explication:

  1. Nous créons maintenant une classe distincte appelée En-tête d'authentification qui est de type Classe SoapHeaderPour modifier les données transmises dans l'en-tête SOAP, il est nécessaire de créer une classe utilisant la classe SoapHeader intégrée à .NET. La personnalisation de l'en-tête SOAP permet désormais de transmettre un nom d'utilisateur et un mot de passe lors de l'appel au service web.
  2. On définit ensuite les variables de 'UserName' et 'Password' qui sont de type string. Ils seront utilisés pour contenir les valeurs du nom d'utilisateur et du mot de passe qui sont transmises au service Web.

Étape 5) À l'étape suivante, le code suivant doit être ajouté au même Fichier TutorialService.asmxCe code définit en réalité la fonction de notre service web. Cette fonction renvoie la chaîne de caractères « Ceci est un Guru99 Service Web » au client. Mais cette fois-ci, la chaîne ne sera renvoyée que si l'application cliente transmet les informations d'identification au service Web.

Tutoriel pour créer des services Web sécurisés : code du service

public class TutorialService : System.Web.Services.WebService
{
   public AuthHeader Credentials;

   [SoapHeader("Credentials")]

   [WebMethod]
   public string Guru99WebService()
   {

      if (Credentials.UserName.ToLower() != "Guru99" ||
      Credentials.Password.ToLower() != "Guru99Password")
      {
         throw new SoapException("Unauthorized",
         SoapException.ClientFaultCode);
      }
      else
      return "This is a Guru99 Web service";
   }

Code Explication:

  1. Ici, nous créons un objet de la classe AuthHeader qui a été créée à l'étape précédente. Cet objet sera transmis à notre Guru99Service Web dans lequel le nom d'utilisateur et le mot de passe peuvent être examinés de près.
  2. L'attribut [SoapHeader] est désormais utilisé pour spécifier que lorsque le service Web est appelé, le nom d'utilisateur et le mot de passe doivent lui être transmis.
  3. Dans ce bloc de code, nous examinons en fait le nom d'utilisateur et le mot de passe transmis lors de l'appel au service Web. Si le nom d'utilisateur est égal à «Guru99” et le mot de passe est égal à «Guru99Password”, puis le message « Ceci est un GuruLe service Web « 99 » est transmis au client. Sinon, une erreur lui sera envoyée si l’identifiant ou le mot de passe est incorrect.

Si le code est exécuté avec succès, la sortie suivante s'affichera lorsque vous exécutez votre code dans le navigateur.

Sortie :

Générer une sortie pour les services Web sécurisés

Le résultat ci-dessus s'affiche lors de l'exécution du programme, ce qui signifie que le service Web est désormais disponible. Cliquez sur le service. Descriptlien ionique.

Description du service « Créer des services Web sécurisés »

Depuis la description du service, vous pourrez désormais constater que le nom d'utilisateur et le mot de passe sont des éléments du WSDLName déposer. Ces paramètres doivent être envoyés lorsque le service Web est appelé.

Meilleures pratiques en matière de sécurité des services Web

Voici les considérations de sécurité à prendre en compte lors de l'utilisation de services Web :

  1. Audit et gestion des journaux Utilisez la journalisation des applications pour enregistrer toutes les requêtes adressées aux services web. Cela génère un rapport détaillé sur les utilisateurs ayant sollicité le service et facilite l'analyse d'impact en cas de faille de sécurité.
  2. Flux d'appels au service web – Observez attentivement le flux des appels aux services web. Par défaut, une application peut effectuer plusieurs requêtes de services web, les jetons d'authentification étant échangés entre ces services. Tous les appels entre services web doivent être surveillés et consignés.
  3. Information sensible N’incluez pas d’informations sensibles telles que des mots de passe, des numéros de carte de crédit ou toute autre information confidentielle dans vos journaux d’activité. Si un événement contient de telles informations, celles-ci doivent être supprimées avant d’être consignées.
  4. Track Business Operations - Track opérations commerciales importantes. Par exemple, instrumentez votre application pour enregistrer l'accès aux méthodes et à la logique métier particulièrement sensibles. Prenons l'exemple d'une boutique en ligneping application. Une application classique comporte plusieurs étapes, comme le choix des articles à acheter, leur ajout au panier, puis l'achat final. L'ensemble de ce processus métier doit être… tracgénéré par le service web.
  5. Authentification appropriée L'authentification est le mécanisme permettant aux clients d'établir leur identité auprès du service web à l'aide d'informations d'identification spécifiques. Il est impératif de ne jamais stocker ces informations d'identification. Par conséquent, si WS Security est utilisé pour appeler le service web, ce dernier ne doit pas conserver les informations d'identification transmises dans l'en-tête SOAP et doit les supprimer.

FAQ

L'IA peut surveiller le trafic des services web en temps réel, détecter les schémas de requêtes inhabituels et signaler les attaques potentielles telles que l'injection de vulnérabilités ou l'utilisation abusive de jetons. Elle peut également analyser les configurations WSDL et SOAP afin de déceler les failles d'authentification ou l'absence de chiffrement.

Oui. Les modèles d'apprentissage automatique entraînés sur du trafic normal peuvent détecter des anomalies telles que le bourrage d'identifiants, les en-têtes SOAP malformés ou les attaques par rejeu. Les équipes de sécurité doivent néanmoins examiner les alertes avant de bloquer les requêtes afin de ne pas perturber les clients légitimes.

Le protocole HTTPS chiffre la connexion entre deux points, les données sont donc exposées une fois qu'elles atteignent un serveur intermédiaire. WS-Security sécurise le message SOAP lui-même.ping Il assure une protection de bout en bout, même lors du transit par plusieurs serveurs.

Un UsernameToken est un élément WS-Security placé dans l'en-tête SOAP qui contient un nom d'utilisateur et, éventuellement, un mot de passe. Il permet à un service web d'authentifier l'appelant avant de traiter la requête.

Résumez cet article avec :