Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
S E D D I K I LY E S ( I N G É N I E R I E D E S S E RV I C E S W E B )
LES ARCHITECTURES DISTRIBUÉES
Client-serveur (2-tiers)
• Rôles spécifiques
• Caractéristiques distinctes
• Les paires peuvent utiliser différents protocoles
LES ARCHITECTURES DISTRIBUÉES
3-tiers ou N-tiers
Une infrastructure physique qui va servir de support à une infrastructure
logicielle (l'infrastructure trois tiers sous-tend l'infrastructure logicielle).En
effet, n'importe quelle application peut-être découpée en trois parties : une
partie interface graphique, une partie fonctionnelle, et une partie de stockage
de données.
LES ARCHITECTURES DISTRIBUÉES
Dans un contexte comme celui des sites internet classiques, le serveur génère
le contenu pour les client (éventuellement à partir de BDD)…
9
WEB SOCKETS
10
RPC (REMOTE PROCEDURE CALL)
Avantage: le flot de contrôle est le même que dans l'appel en mode centralisé
(simule du temps réel)
Inconvénient: le client reste inactif jusqu’à la réponse du serveur
RPC (REMOTE PROCEDURE CALL)
• Ces langages sont souvent représenter dans des formats standards, en particulier
XML et JSON
EN QUEL FORMAT COMMUNIQUER
Les services Web échangent des données dans des formats qui doivent être interprétables
par tous les serveurs et tous les types de clients pouvant échanger.
• Text/plain: Format string basique, pour les échanges de messages simples
• XML: Un langage standardisé par la W3C et basé sur un système de balises. Il peut
décrire à la fois des valeurs et les relations entre les valeurs
• JSON: C’est la syntaxe de base des objets du langage JavaScript. C’est une
représentation sans schéma, en texte clair, de données structurées basées sur des paires
nom/valeur et des listes ordonnées, et on peut y stocker toute sorte de données (string,
nombres, arrays, fonctions…etc)
Des fichiers peuvent également être transmis, souvent à travers les types définis par le
standard MIME (Multipurpose Internet Mail Extensions) qui contient de nombreux
types de médias à transmettre (image, audio, video…etc)
LES SERVICES WEB
• Un service web est un système logiciel identifié par un URI, dont les
interfaces publiques et les « bindings » sont définies et décrites en XML.
• Le principe est basé sur les Architectures orientées services (SOA)
• Sa définition peut être découverte [dynamiquement] par d’autres systèmes
logiciels. Ces autres systèmes peuvent ensuite interagir avec le service web
d’une façon décrite par sa définition, en utilisant des messages XML
transportés par des protocoles Internet.
Extension de XML-RPC
LES SERVICES WEB
LES SERVICES WEB
Principes
• Protocole d’échanges d’informations dans un environnement distribué basé sur
XML
• Interopérabilité entre applications d’une même entreprise (Intranet)
• Interopérabilité inter entreprises entre applications et services web
Corps
• Identifié par la balise <namespace:Body>
• Contient la réponse à l’appel d’une action du service
Une erreur
Réponse de l’action
SOAP
WSDL (Web Service Description Language )
• Identification : URIs
• Opérations (HTTP) : GET, PUT, POST, DELETE
• Contenu
• Représentation
• Utilise le principe des « MIME types » dans l’en-tête HTTP XML
(application/xml), JSON (application-/json), ...
• Pas d’état (stateless): Chaque requête est auto-suffisante, afin de ne
rien charger de superflu sur le serveur.
• Orienté ressources
• Représentation = état courant de la ressource
• Liens entre les ressources par hyperliens (href)
L’ARCHITECTURE REST
• Exemple
L’ARCHITECTURE REST
• Une API REST se doit d’être sans état ou stateless en anglais. La
communication entre le client et le serveur ne doit pas dépendre d’un
quelconque contexte provenant du serveur. Ainsi, chaque requête doit
contenir l’ensemble des informations nécessaires à son traitement. Cela
permet au serveur de traiter indifféremment les requêtes de plusieurs
clients via de multiples instances de serveurs.
Roy
Fielding
(2000)
L’ARCHITECTURE REST
Critères du Rest
• Il existe quatre grands niveaux d’évaluation d’une API. Au plus on atteint un
niveau élevé au plus notre API est considérée comme RESTful et respecte ce
qu’on appelle communément les “bonnes pratiques”.
• Client–serveur
• Sans état (stateless)
• Avec mise en cache
• En couches (impossible de déterminer le nombre de saut)
• Avec code à la demande
• Interface uniforme
• Identification des ressources dans les requêtes
• Manipulation des ressources par des représentations
• Messages auto-descriptifs
• Hypermédia comme moteur d'état de l'application
L’ARCHITECTURE REST
Caractéristiques :
• Les services REST sont sans états (Stateless)
• Chaque requête envoyée au serveur doit contenir toutes les informations relatives à son
état et est traitée indépendamment de toutes autres requêtes
• Minimisation des ressources systèmes (pas de gestion de session, ni d’état)
• Interface uniforme basée sur les méthodes HTTP (GET, POST, PUT,
DELETE)
• Les architectures RESTful sont construites à partir de ressources
uniquement identifiées par des URI(s)
L’ARCHITECTURE REST
Les codes status les plus courants que l’on retrouve généralement sur le web sont :
200 OK Tout s'est bien passé
201 Created La création de la ressource s'est bien passée (il n’est pas rare que les attributs de la
nouvelle ressource soient aussi renvoyées dans la réponse. Dans ce cas, l’URL de cette ressource
nouvellement créée est ajouté via un header Location )
• 204 No content Même principe que pour la 201, sauf que cette fois-ci, le contenu de la ressource
nouvellement créée ou modifiée n'est pas renvoyée en réponse
• 304 Not modified Le contenu n'a pas été modifié depuis la dernière fois qu'elle a été mise en cache
• 400 Bad request La demande n'a pas pu être traitée correctement
• 401 Unauthorized L'authentification a échoué
• 403 Forbidden L'accès à cette ressource n'est pas autorisé
• 404 Not found La ressource n'existe pas
• 405 Method not allowed La méthode HTTP utilisée n'est pas traitable par l'API
• 406 Not acceptable L’API est dans l’incapacité de fournir le format demandé par les en têtes
Accept. Par exemple, le client demande un format (XML par exemple) et l'API n'est pas prévue
pour générer du XML
• 500 Server error Le serveur a rencontré un problème.
L’ARCHITECTURE REST
L’ARCHITECTURE REST
• XMLHttpRequest
• Ajax
• Fetch API
• Axios
• La gestion des accès et la sécurité
CROSS-ORIGIN RESOURCE SHARING
(CORS)
• Mécanisme qui consiste à ajouter des en-têtes HTTP afin de
permettre à un agent utilisateur d'accéder à des ressources d'un
serveur situé sur une autre origine que le site courant. Un agent
utilisateur réalise une requête HTTP multi-origine (cross-
origin) lorsqu'il demande une ressource provenant d'un domaine,
d'un protocole ou d'un port différent de ceux utilisés pour la page
courante.
• Le standard CORS décrit de nouvelles entêtes HTTP qui offrent
aux navigateurs et aux serveurs un moyen de faire une requête vers
une URL distante uniquement s'ils en ont l'autorisation. Bien que
certaines validations et autorisations peuvent être effectuées par le
serveur, il est généralement de la responsabilité du navigateur de
supporter ces entêtes et d'honorer les restrictions qu'elles imposent.
CROSS-ORIGIN RESOURCE SHARING
(CORS)
MENACES SUR LES WEB SERVICES
DDoS
Les dénis de services distribués sont un ensemble de techniques d’attaques
(surtout contre les serveurs) dont le principe est de saturer la machine attaquée,
par exemple en lui envoyant une quantité ingérable de requêtes en un minimum
de temps.
Injections SQL
Les infections SQL sont des interférences que produit un hacker sur les requêtes
qu’une application enverra au serveur pour être exécuter au niveau d’une base de
données, soit pour récupérer des données, ou pire, pour altérer le système
d’information.
AUTHENTIFICATION ET AUTORISATION
Authentification basique
Celle-ci ne demande qu'un nom d'utilisateur et un mot de passe. Le client prend ces
deux identifiants et les transforme en une valeur unique, qu'il passe dans la requête
grâce à un header HTTP appelé Authorization.
Obligation d’utiliser un
cryptage (comme SSL)
pour éviter les attaques
Man in the Middle ce qui
consomme des ressources,
en plus du risque de
sessions restées ouvertes
AUTHENTIFICATIONS
Dans cette approche, une valeur générée unique est attribuée à chaque utilisateur pour
la première fois, ce qui signifie que l'utilisateur est connu. Lorsque l'utilisateur tente de
revenir dans le système, sa clé unique (parfois générée à partir de la combinaison
d’informations matériel et de données IP, et parfois générée de manière aléatoire par le
serveur qui les connaît) est utilisée pour prouver qu'il s'agit du même utilisateur
qu'auparavant.
Ce système est très bon en terme de performance et facile à mettre en place, c’est
pourquoi il est très utilisé par les Web APIs.
Cependant c’est une solution peu sécurisée étant donné que tout dépend d’une clé qui
peut-être récupérée sur le réseau (par sniffing) ou une machine non sécurisée (par un
spyware par exp)
AUTHENTIFICATIONS
Open Authorization (OAuth) constitue une bonne solution à mettre en place pour
gérer les droits des utilisateurs en lecture/écriture.
Les SESSIONS
Un mécanisme permettant à certains types de serveurs (comme eux utilisant PHP) de
gérer l’identité des utilisateurs.
Il peut être efficace dans des réseaux limités ou pour un nombre d’utilisateurs restreints,
mais ils obligent les serveurs à conserver des informations en mémoire ce qui peut-être
problématique au cas ou le nombre de clients deviendrait trop important, et c’est contre
le principe stateless des Api Rest.
En plus les systèmes de sessions utilisent les web COOKIES pour identifier le client,
ce qui peut constituer une vulnérabilité à des attaques par sidejacking ou XSS par
exemple.
AUTORISATIONS
1. Header : La première partie du JWT est le header. Il s’agit d’un objet JSON encodé
en base64 qui représente l’en-tête du token. Il est composé de deux parties :
• Le type du token;
• L’algorithme utilisé pour la signature
exp: { "typ":"JWT" , "alg":"HS256" }
2. Payload : La seconde partie du JWT est le payload. Il s’agit tout comme le header,
d’un objet JSON encodé en base64 qui représente cette fois-ci le corps du token. C’est
dans cette partie que l’on mettra les informations de l’utilisateur (identifiant, rôle, etc.)
ou toute autre information utile au serveur.
Signature : La dernière partie est la signature du token. Il s’agit d’un hash des deux
premières parties du token réalisé en utilisant l’algorithme qui est précisé dans le header
exp: HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), 'secret')
AUTORISATIONS
L’algorithme utilise une clé secrète (détenue par le serveur), utilisée pour signer les
tokens mais également s’assurer de la validité de ceux-ci en vérifiant leur signature. De
ce fait, si un utilisateur malveillant modifie le contenu du token, la signature ne sera
plus correcte et le jeton sera ainsi rejeté.
Un JWT possède une date d’expiration (propriété “exp” du payload), ainsi lorsqu’un
JWT expiré est envoyé lors d’une requête à l’API, celle-ci renverra une erreur 401
indiquant que le JWT n’est plus valide. La durée de validité d’un JWT va dépendre du
type de données échangées. Elle sera de quelques minutes pour l’échange de données
sensibles à plusieurs heures pour les données non sensibles.
• Exemple :
GET /graphql?query={ contact(id: "1") { nom, prenom,
adresse { rue, ville } } } { "nom": "Doe", "prenom":
"John", "adresse": { "rue": "75000", "ville": "Paris", } }
Ce qui permet par exemple d’éviter de créer un trop grand nombre de fichiers
coté serveur pour répondre à des demandes de types différents
NOUVELLES TECHNOLOGIES DE WS
GraphQL n’est pas une norme, mais un projet développer par Facebook, il
en existe d’autres similaires comme Falcor (développé par Netflix)
LES TECHNOLOGIES UTILISANT REST