Asp net web api 2 jwt authentication
Authentification de l’utilisateur dans ASP.NET API WEB 2 avec des jetons JWT signés RSA (partie 1)
Vous travaillez sur une application web ou mobile et vous recherchez la solution la plus simple pour une autorisation d’utilisateur sécurisée ? Si c’est le cas, vous pouvez utiliser JSON Web Token . Poursuivez votre lecture pour découvrir comment cela fonctionne et voir des exemples d’authentification d’un utilisateur dans une application ASP.NET WEB API 2 .
Lors de la programmation d’une application web, nous devons faire très attention à sa sécurité. Nous voulons nous assurer que l’accès à ses ressources n’est disponible que pour les utilisateurs autorisés . Si notre application est basée sur une interface REST, elle utilise un protocole HTTP sans état. Par conséquent, l’identifiant qui autorise l’accès doit être inclus dans chaque demande envoyée au serveur. C’est le scénario parfait pour l’utilisation d’un jeton.
Un jeton peut être un caractère aléatoire chaîne, inclure des informations sur l’utilisateur, être encodé et avoir un temps de validation limité. Un JSON Web Token stocke des données utilisateur spécifiques, par exemple : id, rôles, droits d’accès . Cela permet de vérifier et d’identifier un utilisateur spécifique.
Le
JSON Web Token (JWT) est une norme ouverte (RFC 7519) qui définit une manière compacte d’envoyer des informations au format JSON. Les données peuvent être encodées avec des algorithmes RSA ou HMAC, afin de garantir la vérification et la sécurité des données.
La structure courte et concise de JWT rend l’envoi de jetons rapide et confortable : nous pouvons le placer dans un en-tête HTTP ou une adresse URL. En même temps, la structure du jeton elle-même nous permet de vérifier un utilisateur.
La tâche principale d’un jeton JWT est l’authentification de l’utilisateur . Cela fonctionne comme suit : après chaque connexion correcte, un utilisateur reçoit un jeton unique qui est placé dans l’en-tête HTTP et validé par le serveur à chaque fois qu’une requête est envoyée. Dans les jetons signés, nous pouvons envoyer en toute sécurité tout type d’information.
La structure d’information dans JSON Web Token est la suivante :
Chacune de ces parties doit être codée et séparée par un point (par exemple ).
En-tête
L’en-tête est composé de deux valeurs : un algorithme d’encodage (par exemple HMAC, SHA256 ou RSA) et le type (par exemple JWT).
Charge utile
Cela inclut les revendications qui sont principalement des informations sur un utilisateur. Nous distinguons trois types de réclamations :
- les réclamations réservées : des réclamations inutiles et prédéfinies, qui sont utiles lorsqu’elles sont incluses dans Token car elles peuvent être vraiment utiles, par exemple iss (émetteur), exp (délai d’expiration), aud (audience).
- Revendications publiques : peuvent être définies par celles qui utilisent des jetons JWT. Pour éviter une collision, ils doivent être définis dans IANA JSON Web Token Registry ou avoir un nom qui n’interfère pas avec les autres.
- Réclamations privées : revendications non standard définies par nous et utilisées uniquement lorsque deux parties qui interagissent l’une avec l’autre en ont connaissance.
Par exemple :
Signature
Avant de créer une signature, vous devez encoder un en-tête et une charge utile de jeton.
Nous avons également besoin d’une clé pour signer les données. Voici un exemple de procédure à l’aide de HMAC SHA256 :
La signature est utilisée pour vérifier l’expéditeur du jeton et vérifier si un message n’a pas été modifié entre-temps.
En
joignant les trois parties du jeton, en les encodant avec Base64 et en les séparant par des points, nous obtenons un message compact, que nous pouvons facilement envoyer un en-tête HTTP ou dans une adresse URL. Comme vous pouvez le voir, il est très court par rapport à d’autres types de solutions de ce type.
Sur le site officiel de JWT, vous pouvez tester vos jetons (c’est-à-dire les générer, les décoder et les vérifier).
Envoi de jetons JWT
Lorsque l’utilisateur souhaite accéder à des données protégées, la demande doit inclure un identifiant. Le jeton JWT est généralement placé dans l’en-tête HTTP à l’aide du schéma Bearer , juste comme ça :
L’autorisation est effectuée de la même manière que l’autorisation sans état, cela signifie que le statut d’un utilisateur connecté n’est pas enregistré sur le serveur. Le jeton contient des revendications codées, qui ne peuvent être téléchargées qu’une seule fois : la première fois que l’utilisateur se connecte. À chaque requête, le serveur lit le jeton et identifie sans ambiguïté l’utilisateur. Cela accélère considérablement le processus d’authentification.
Le processus d’authentification du jeton JWT (la source : jwt.io)
Une fois que nous sommes familiarisés avec la structure de base du JSON Web Token, son utilisation et sa livraison, nous pouvons passer aux étapes suivantes. Dans la prochaine partie de l’article, je décrirai une authentification utilisateur de base dans ASP.NET API WEB 2 avec des jetons JWT signés RSA.
Sources: