Didacticiel de sécurité du service Web (WS) avec exemple SOAP

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

WS Security est une norme qui traite de la sécurité lorsque les données sont échangées dans le cadre d'un service Web. Il s'agit d'une fonctionnalité clé de SOAP qui le rend très populaire pour la création de services Web.

La sécurité est une fonctionnalité importante dans toute application Web. Étant donné que presque toutes les applications Web sont exposées à Internet, il existe toujours un risque de menace de sécurité pour les applications Web. Par conséquent, lors du développement d’applications Web, il est toujours recommandé de s’assurer que l’application est conçue et développée dans un souci de sécurité.

Menaces de sécurité et contre-mesures

Pour comprendre les menaces de sécurité qui peuvent être hostiles à une application Web, examinons un scénario simple d'une application Web et voyons comment elle fonctionne en termes de sécurité.

L'une des mesures de sécurité disponibles pour le HTTP est le protocole HTTPS. HTTPS est le moyen sécurisé de communication entre le client et le serveur sur le Web. HTTPS utilise la couche Secure Sockets ou SSL pour une communication sécurisée. Le client et le serveur disposeront tous deux d'un certificat numérique pour s'identifier comme étant authentiques lors d'une communication entre le client et le serveur.

Menaces de sécurité et contre-mesures

Dans une communication HTTPS standard entre le client et le serveur, les étapes suivantes ont lieu

  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 cryptées. Cela garantit que si d’autres utilisateurs tentent de briser la sécurité et d’obtenir les données requises, ils ne pourront pas les lire car elles seraient cryptées.

Mais le type de sécurité ci-dessus ne fonctionnera pas dans toutes les situations. Il peut arriver un moment où le client peut communiquer avec plusieurs serveurs. Un exemple donné ci-dessous montre un client parlant à la fois à une base de données et à un serveur Web. Dans de tels cas, toutes les informations ne peuvent pas transiter par le protocole https.

Menaces de sécurité et contre-mesures

C'est là que SOAP entre en action pour surmonter ces obstacles en mettant en place la spécification de sécurité WS. Avec cette spécification, toutes les données liées à la sécurité sont définies dans l'élément d'en-tête SOAP.

L'élément d'en-tête peut contenir les informations mentionnées ci-dessous

  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 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 atteint la destination.

Dans un environnement à plusieurs serveurs, la technique d'authentification SOAP ci-dessus est utile de la manière suivante.

  • 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 si le message est transmis au serveur de base de données dans une requête HTTP, il ne peut pas être déchiffré car la base de données ne dispose pas des mécanismes appropriés pour le faire.
  • Ce n'est que lorsque la requête atteint réellement le serveur Web en tant que protocole SOAP qu'il sera capable de déchiffrer le message et de renvoyer la réponse appropriée au client.

Nous verrons dans les rubriques suivantes comment le standard WS Security peut être utilisé pour SOAP.

Normes de sécurité des services Web

Comme indiqué dans la section précédente, la norme WS-Security s'articule autour de 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 2 manières.

Tout d'abord, il définit un élément spécial appelé UsernameToken. Ceci est utilisé pour transmettre le nom d'utilisateur et le mot de passe au service Web.

L'autre méthode consiste à utiliser un jeton binaire via le BinarySecurityToken. Ceci est utilisé dans les situations dans lesquelles des techniques de chiffrement telles que Kerberos ou X.509 sont utilisées.

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

Normes de sécurité des services Web

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

  1. Une demande peut être envoyée du client du service Web au service de jeton de sécurité. Ce service peut être un service Web intermédiaire spécialement conçu pour fournir des noms d'utilisateur/mots de passe ou des certificats au service Web SOAP réel.
  2. Le jeton de sécurité est ensuite transmis au client du service Web.
  3. Le client du service Web a ensuite appelé le service Web, mais cette fois en s'assurant que le jeton de sécurité est 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 montre le format de la partie d'authentification qui fait partie du document WSDL. Désormais, basé sur l'extrait ci-dessous, le message SOAP contiendra 2 éléments supplémentaires, l'un étant le nom d'utilisateur et l'autre 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>

Lorsque le message SOAP est effectivement transmis entre les clients et le serveur, la partie du message qui contient les informations d'identification de l'utilisateur peut ressembler à celle illustrée ci-dessus. Le nom de l'élément wsse est un élément spécial nommé défini pour SOAP et signifie qu'il contient des informations basées sur la sécurité.

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

Examinons maintenant l'exemple de sécurité du service Web SOAP. Nous allons construire une sécurité de service Web sur l'exemple démontré plus tôt dans le chapitre SOAP et y ajouterons une couche de sécurité.

Dans notre exemple, nous allons créer un service web simple, qui servira à renvoyer une chaîne à l'application qui appelle le service web. Mais cette fois-ci, lorsque le service Web est invoqué, les informations d'identification doivent être fournies au service appelant. Suivons 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.

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 l'application Web ASP.NET. Le projet doit être de ce type afin de créer un projet de services Web. En choisissant cette option, Visual Studio effectuera alors 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 «webservice.asmx.» Assurez-vous ensuite de donner un emplacement où les fichiers du projet seront stockés.

Créer des services Web sécurisés

Une fois cela fait, vous verrez le fichier projet créé dans votre explorateur de solutions dans Visual Studio 2013.

Créer des services Web sécurisés

Étape 3) Dans cette étape,

Nous allons ajouter un fichier de service Web à notre projet

  1. Faites d’abord un clic droit sur le fichier du projet comme indiqué ci-dessous

Créer des services Web sécurisés

  1. Une fois que vous avez fait un clic droit sur le fichier du projet, vous avez la possibilité de choisir l'option « Ajouter->Service Web (ASMX) pour ajouter un fichier de service Web. Fournissez simplement un nom de service de didacticiel pour le fichier de nom du service Web.

    Créer des services Web sécurisés

L'étape ci-dessus ouvrira une boîte de dialogue dans laquelle vous pourrez saisir le nom du fichier du service Web. Ainsi, dans la boîte de dialogue ci-dessous, entrez le nom de TutorialService comme nom de fichier.

Créer des 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 des services Web sécurisés

		return "This is a Guru99 Web Service";
	}
	
	public class AuthHeader : SoapHeader
	{
		public string UserName;
		public string Password;

	}
}

Explication du code : -

  1. Nous créons maintenant une classe distincte appelée En-tête d'authentification qui est de type Classe SoapHeader. Chaque fois que vous souhaitez modifier ce qui est transmis dans l'en-tête SOAP, vous devez créer une classe qui utilise la classe SoapHeader intégrée de .Net. En personnalisant le SOAPheader, nous avons désormais la possibilité de transmettre un « Nom d'utilisateur » et un « Mot de passe » lorsque le service Web est appelé.
  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.asmx. Ce code définit en fait la fonction de notre service Web. Cette fonction renvoie une chaîne « Ceci est un service Web Guru99 » au client. Mais cette fois, la chaîne ne sera renvoyée que si l'application client transmet les informations d'identification au service Web.

Créer des services Web sécurisés

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);
		}
		eise
		return "This is a Guru99 Web service";
	}

Explication du code : -

  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 Guru99ServiceWeb 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 du service Web. Si le nom d'utilisateur est égal à « Guru99 » et le mot de passe est égal à « Guru99Password », alors le message « Ceci est un service Web Guru99 » est transmis au client. Sinon, une erreur sera envoyée au client si un identifiant utilisateur et un mot de passe incorrects sont transmis.

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

Sortie :

Créer des services Web sécurisés

La sortie ci-dessus s'affiche lorsque le programme est exécuté, ce qui signifie que le service Web est désormais disponible. Cliquons sur le Service Descriptlien ionique.

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 envoyées aux services Web. Cela donne un rapport détaillé sur qui a invoqué le service Web et peut aider à l'analyse d'impact en cas de faille de sécurité.

2. Flux d'appels vers le service web – Essayez de noter le flux des appels dans les services Web. Par défaut, une application peut appeler plusieurs requêtes de services Web avec des jetons d'authentification transmis entre ces services Web. Tous les appels entre les services Web doivent être surveillés et enregistrés.

3. Informations sensibles – N’incluez pas d’informations sensibles dans vos entrées de journal telles que des mots de passe ou des numéros de carte de crédit ou toute sorte d’autres informations confidentielles. Si un événement contient l’une de ces informations, il doit être ignoré avant d’être enregistré.

4. Suivre les affaires Operations – Suivre les opérations commerciales importantes. Par exemple, instrumentez votre application pour enregistrer l’accès à des méthodes et à une logique métier particulièrement sensibles. Prenons un exemple d'application d'achat en ligne. Il y a plusieurs étapes dans une application typique comme le choix des articles à acheter, les articles chargés dans le panier puis l'achat final. L’ensemble de ce flux de travail métier doit être suivi par le service Web.

5. Authentification appropriée – L'authentification est le mécanisme par lequel les clients peuvent établir leur identité auprès du service Web à l'aide d'un certain ensemble d'informations d'identification pouvant prouver cette identité. Il ne faut jamais stocker les informations d'identification de l'utilisateur et, par conséquent, si WS Security est utilisé pour appeler le service Web, il convient de noter que le service Web ne doit pas stocker les informations d'identification envoyées dans l'en-tête SOAP. Ceux-ci doivent être supprimés par le service Web.

Résumé

  • SOAP fournit une couche supplémentaire appelée WS Security pour fournir une sécurité supplémentaire lorsque des appels sont effectués vers des services Web.
  • Le WS Security peut être appelé avec un simple nom d'utilisateur ou un mot de passe ou peut être utilisé avec des certificats binaires pour l'authentification.
  • Nous l'avons vu dans . Net nous pouvons personnaliser le service Web pour qu'un nom d'utilisateur et un mot de passe soient transmis dans le cadre de l'élément d'en-tête SOAP.