Photo by Thom Milkovic on Unsplash
Session, Cookies, JWT, Token, SSO, et OAuth 2.0 pour les débutants
First, solve the problem. Then write the code – John Johnson
J'ai pris la décision d'écrire cette note afin de partager et d'expliquer quelques concepts liés à la sécurité. J'espère sincèrement que vous prendrez plaisir à la lire et que ces informations vous seront utiles.
Ces termes sont essentiels pour identifier, authentifier et autoriser les utilisateurs dans une application(Mobile,Web ...) . Bref arrêtons les blabla
𝗪𝗪𝗪-𝗔𝘂𝘁𝗵𝗲𝗻𝘁𝗶𝗰𝗮𝘁𝗲 🔨
Méthode la plus ancienne et la plus basique
Scénario de fonctionnement :
Le navigateur demande un nom d'utilisateur et un mot de passe
Manque de contrôle sur le cycle de vie de la connexion
Rarement utilisée aujourd'hui (😞) à moins que tu sois un dinosaure
𝗦𝗲𝘀𝘀𝗶𝗼𝗻-𝗖𝗼𝗼𝗸𝗶𝗲 🍪
Une Session-Cookie, parfois que je surnomme de manière humoristique "cookie miam miam 🍪", est un type de cookie utilisé pour enregistrer des informations de session dans le navigateur d'un utilisateur. Ces cookies sont généralement créés lorsque l'utilisateur se connecte à un site web et sont utilisés pour stocker des données telles que l'ID de session et les préférences de l'utilisateur. Les cookies de session sont temporaires et sont automatiquement effacés lorsque l'utilisateur ferme son navigateur. Cela signifie que chaque fois que l'utilisateur ouvre son navigateur pour accéder au site web, une nouvelle session est lancée, entraînant ainsi la création d'un nouveau cookie de session. Donc, si tu ouvres 1000 sites par jour dans ton navigateur, cela implique la création de nombreux cookies de session à chaque session.
Les session-cookies sont largement utilisés pour maintenir l'état de la session entre le client et le serveur. Ils sont souvent utilisés pour stocker des informations telles que le panier d'achat d'un utilisateur ou les préférences de langue, de thème ou de mise en page. Cependant, les cookies de session peuvent également présenter des risques de sécurité, car ils peuvent être volés.
Scénario de fonctionnement :
Le serveur maintient le stockage de la session
Le navigateur conserve l'identifiant de la session
Fonctionne principalement avec les navigateurs, n'est pas adapté aux applications mobiles
𝗧𝗼𝗸𝗲𝗻 😈
Le terme "Token d'authentification" est largement utilisé dans les systèmes d'authentification pour désigner un concept clé. Il s'agit d'une clé générée par le serveur et délivrée au client (comme votre application mobile ou frontend, etc.) après une demande d'authentification réussie.
Ce jeton est ensuite inclus dans chaque requête que le client envoie au serveur pour attester de son identité. Le serveur authentifie la validité de ce jeton en le comparant à sa propre base de données de jetons valides, qui peut également contenir des informations relatives à l'utilisateur, comme son identifiant et les permissions associées. Les tokens d'authentification sont employés dans des systèmes d'authentification modernes, tels que OAuth et JWT, qui facilitent une authentification plus sécurisée et une gestion plus aisée pour les développeurs d'applications.
𝗝𝗪𝗧 (𝗝𝗦𝗢𝗡 𝗪𝗲𝗯 𝗧𝗼𝗸𝗲𝗻) 🔓
Les JSON Web Tokens (JWT) sont des éléments d'authentification couramment utilisés dans les applications web ou mobiles pour l'identification des utilisateurs authentifiés.
Une fois généré, le JWT est renvoyé au client, généralement sous la forme d'un objet JSON, et est stocké de manière appropriée. Par la suite, le client inclut ce jeton dans chaque requête HTTP au serveur en utilisant un en-tête d'autorisation. Cela permet au serveur de vérifier l'identité de l'utilisateur. (Cependant, les débutants peuvent trouver cette étape un peu fastidieuse)
Le JWT contient généralement des informations concernant l'utilisateur, telles que son ID, son nom d'utilisateur et d'autres données pertinentes.
Les JWT sont une méthode pratique et sécurisée pour authentifier les utilisateurs dans les applications web. Ils permettent de stocker les informations d'identification côté client, plutôt que sur le serveur, réduisant ainsi les risques d'attaques de type vol de session. De plus, grâce à leur structure sous forme d'objet JSON, il est aisé d'ajouter des informations supplémentaires sur l'utilisateur dans le jeton. Cela peut s'avérer utile pour gérer les autorisations et les accès.
Exemple de JWT .
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Voici le résultat une fois décodé (c'est un exemple)
{
"alg": "RS256",
"typ": "JWT",
"kid": "mwktkprgEitPQ6cr3MXOvaLe3wMz5jngCc_Xb9q12DM"
}
{
"exp": 1680033561,
"iat": 1680031761,
"jti": "08b5f8bb-018c-4771-a996-9230Jaoeobe",
"iss": "http://localhost:8080/realms/king",
"aud": "account",
"sub": "fa94d35a-79b3-459f-aeb5-40184a563c40",
"typ": "Bearer",
"acr": "1",
"email_verified": false,
"name": "Josue",
"phoneId": "1234567890",
"preferred_username": "josue",
"given_name": "Josue",
"family_name": "TCIRKTEMA",
"email": "tchirktemajosue@gmail.com"
}
Voici un outils pratique pour décoder rapidement les JWT: https://jwt.io/
𝗦𝗦𝗢 (𝗦𝗶𝗻𝗴𝗹𝗲 𝗦𝗶𝗴𝗻-𝗢𝗻) & 𝗢𝗔𝘂𝘁𝗵 𝟮.𝟬 👑
SSO (Single Sign-On) = authentification centralisé (c'est fini)
Oups!!!! en gros, une fois que l'utilisateur s'est authentifié sur une application avec ses identifiants, il peut accéder à d'autres applications en utilisant le même ensemble d'identifiants sans avoir à se reconnecter.
Scénario de fonctionnement :
Initiation de l'autorisation : Lorsqu'une application souhaite accéder aux données d'un utilisateur sur un service tiers, elle soumet une demande d'autorisation à ce service. L'utilisateur est alors redirigé vers le service pour donner son consentement à l'application.
Génération du jeton d'accès : Une fois que l'utilisateur a donné son accord, le service génère un "jeton d'accès" spécifique pour cette application. Ce jeton est ensuite transmis à l'application, qui l'utilisera comme preuve pour accéder aux données approuvées.
Utilisation du jeton d'accès : L'application insère le jeton d'accès dans chaque demande qu'elle envoie au service tiers. Le service vérifie la validité du jeton et autorise l'accès uniquement aux données spécifiques qui ont été approuvées.
OAuth 2.0 est souvent utilisé dans des scénarios tels que les connexions via des comptes tiers (comme "Se connecter avec Google"), l'accès aux données d'un utilisateur sur des plateformes de médias sociaux, et bien d'autres applications où l'authentification et l'autorisation sécurisées sont nécessaires.