AUTH JWT Flashcards
Qu’est-ce que l’authentification HTTP et quels sont les deux principaux modes d’authentification ?
L’authentification HTTP est le processus qui protège l’accès à tout ou partie d’un site web ou d’une API. Les deux principaux modes sont l’authentifi
cation par session (stockage côté serveur avec cookies) et l’authentification par token (comme JWT).
Que signifie JWT et à quoi sert-il ?
JWT signifie JSON Web Token. C’est un standard ouvert pour l’échange sécurisé de jetons signés entre plusieurs parties. Il permet de transmettre des informations de manière sécurisée et compacte sous forme de chaîne JSON.
De quelles parties se compose un JWT ?
Un JWT se compose de trois parties : le header (contenant l’algorithme et le type), le payload (contenant les claims/données) et la signature (permettant de vérifier l’authenticité).
Citez trois claims standards que l’on peut trouver dans le payload d’un JWT.
Trois claims standards sont : sub (le sujet/utilisateur identifié), exp (date d’expiration du token) et iss (émetteur du token).
Comment est générée la signature d’un JWT ?
La signature est générée en utilisant un algorithme (souvent HMAC-SHA256) avec la clé secrète du serveur, le header et le payload encodés en base64 et concaténés avec un point.
Expliquez comment fonctionne l’authentification par token dans une application web.
Lors du login, le serveur vérifie les identifiants, génère un JWT et le renvoie au client. Ensuite, pour chaque requête, le client inclut le JWT dans l’en-tête Authorization, et le serveur valide ce token avant de traiter la requête.
Où et comment le JWT est-il généralement stocké côté client ?
Le JWT peut être stocké dans les cookies, le localStorage du navigateur, ou simplement dans une variable JavaScript pendant la navigation.
Dans quel en-tête HTTP le JWT est-il inclus lors des requêtes ?
Le JWT est généralement inclus dans l’en-tête HTTP “Authorization” avec le préfixe “Bearer”, comme ceci : Authorization: Bearer eyJhbGc…
Comment vérifieriez-vous côté serveur qu’un JWT est valide avant de traiter une requête ?
Il faut vérifier la signature du token avec la clé secrète, s’assurer que la date d’expiration n’est pas dépassée, et vérifier que l’émetteur (iss) et l’audience (aud) correspondent aux valeurs attendues.
Quelles informations sensibles ne devriez-vous jamais inclure dans le payload d’un JWT et pourquoi ?
On ne doit jamais inclure de mots de passe, de clés d’API ou de données confidentielles dans le payload car il est simplement encodé en base64 et non chiffré, donc facilement décodable par n’importe qui possédant le token.
Comment implémenteriez-vous un middleware d’authentification JWT dans une application Express.js ?
Un middleware Express vérifierait la présence du token dans l’en-tête Authorization, le validerait avec une bibliothèque comme jsonwebtoken, et soit rejetterait la requête avec un statut 401 si le token est invalide, soit ajouterait les informations de l’utilisateur à l’objet request et passerait au middleware suivant.
Comment gérer la sécurité des tokens JWT dans une application web ?
Pour sécuriser les JWT : utiliser HTTPS, définir une durée d’expiration courte, implémenter un système de refresh token, stocker la clé secrète de manière sécurisée côté serveur, et ne pas inclure d’informations sensibles dans le payload.
Quels avantages présentent les JWT par rapport à l’authentification par session ?
Les JWT sont sans état (stateless), ce qui facilite la mise à l’échelle des applications, fonctionnent bien à travers différents domaines et avec les applications mobiles, et réduisent la charge sur le serveur en éliminant le besoin de stocker les sessions.
Comment développeriez-vous une fonctionnalité de déconnexion avec JWT ?
Pour la déconnexion avec JWT, on peut : 1) Supprimer le token côté client, 2) Utiliser un système de liste noire côté serveur pour les tokens invalidés, ou 3) Utiliser des tokens à durée de vie courte avec refresh tokens qu’on peut invalider à la déconnexion.
Comment implémenteriez-vous différents niveaux d’autorisation (admin, utilisateur, etc.) en utilisant JWT ?
On peut inclure un claim role dans le payload du JWT (ex: “role”: “admin”) et vérifier ce rôle dans les middlewares d’autorisation pour permettre ou refuser l’accès à certaines routes ou fonctionnalités.
Comment cette authentification par JWT s’inscrit-elle dans la sécurisation d’une application web complète ?
L’authentification JWT fait partie d’une stratégie globale de sécurité incluant la validation des entrées, la protection contre les injections SQL, les attaques XSS et CSRF, et le chiffrement des données sensibles. Elle permet de contrôler l’accès aux ressources et de vérifier l’identité des utilisateurs.
Dans un projet DWWM, comment structureriez-vous votre code pour implémenter l’authentification JWT de manière modulaire ?
Je structurerais le code avec : 1) Un module d’authentification avec les fonctions de génération/vérification des tokens, 2) Des middlewares pour protéger les routes, 3) Des services pour gérer les utilisateurs, et 4) Des controllers séparés pour les routes d’authentification.
Comment assurer la maintenance et l’évolution du système d’authentification d’une application en production ?
Pour maintenir le système d’authentification : mettre à jour régulièrement les dépendances, suivre les bonnes pratiques de sécurité, implémenter une rotation des clés secrètes, effectuer des audits de sécurité, et documenter clairement le fonctionnement pour faciliter l’intervention d’autres développeurs.
Quelles documentations techniques consulteriez-vous pour approfondir vos connaissances sur JWT ?
Je consulterais la RFC 7519 (spécification officielle), la documentation de la bibliothèque jsonwebtoken, le site jwt.io pour explorer les tokens, et les guides de sécurité comme l’OWASP pour les bonnes pratiques de sécurisation des tokens.
Comment tester le bon fonctionnement de l’authentification JWT dans une application ?
Je testerais l’authentification avec : des tests unitaires pour les fonctions de génération/vérification des tokens, des tests d’intégration pour les endpoints d’authentification, des tests de sécurité pour vérifier la résistance aux attaques, et des tests de bout en bout simulant des scénarios utilisateur complets.