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.
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.
Dans une communication HTTPS standard entre le client et le serveur, les étapes suivantes se déroulent :
- 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.
- Le serveur s'authentifie ensuite auprès du client en envoyant son certificat. Cela garantit que le client communique avec le bon serveur.
- 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.
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 :
- 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.
- 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.
Vous trouverez ci-dessous les étapes qui se déroulent dans le flux de travail décrit ci-dessus :
- 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.
- Le jeton de sécurité est ensuite transmis au client du service Web.
- 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.
- 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.
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,
- 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.
- 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.
Une fois l'opération terminée, vous verrez le fichier projet créé dans l'explorateur de solutions de Visual Studio 2013.
Étape 3) Dans cette étape, nous allons ajouter un fichier de service Web à notre projet.
- Tout d'abord, cliquez avec le bouton droit sur le fichier de projet comme indiqué ci-dessous.
- 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 ».
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.
É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.
return "This is a Guru99 Web Service"; } public class AuthHeader : SoapHeader { public string UserName; public string Password; } }
Code Explication:
- 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.
- 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.
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:
- 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.
- 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.
- 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 :
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.
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 :
- 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é.
- 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.
- 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.
- 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.
- 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.














