Introduction : pourquoi OAuth 2.0 et JWT sont-ils la norme de l'autorisation moderne ?
Dans le développement web moderne, la transmission sécurisée des données entre le client et le serveur est une tâche cruciale. Deux protocoles clés qui aident à résoudre ce problème sont OAuth 2.0 (protocole d'autorisation ouvert) et JWT (JSON Web Token).
OAuth 2.0 permet aux applications d'obtenir un accès limité aux ressources d'un utilisateur sans transmettre son identifiant et son mot de passe. JWT, quant à lui, est un format de jeton compact et autonome qui contient toutes les informations nécessaires pour identifier l'utilisateur.
Dans cet article, nous allons voir comment implémenter l'autorisation OAuth 2.0 et JWT en C# (.NET). Vous apprendrez à configurer le middleware, générer un jeton et protéger les points de terminaison API. Ce contenu est destiné aux développeurs débutants connaissant les bases d'ASP.NET Core.
1. Bases d'OAuth 2.0 et JWT
Avant d'écrire du code, comprenons les concepts clés.
Qu'est-ce qu'OAuth 2.0 ?
OAuth 2.0 est un protocole d'autorisation qui permet aux applications tierces d'accéder aux ressources d'un utilisateur (par exemple, aux données de profil) sans transmettre ses identifiants. Au lieu de cela, un jeton d'accès (access token) est utilisé.
Les rôles principaux dans OAuth 2.0 :
- Resource Owner — l'utilisateur propriétaire des ressources.
- Client — l'application demandant l'accès.
- Authorization Server — le serveur délivrant les jetons après authentification de l'utilisateur.
- Resource Server — le serveur fournissant les ressources protégées (par exemple, une API).
Qu'est-ce que JWT ?
JWT (JSON Web Token) est un format de jeton composé de trois parties séparées par des points :
- Header — contient le type de jeton (JWT) et l'algorithme de signature (par exemple, HS256).
- Payload — contient les données (claims), telles que l'identifiant de l'utilisateur, le rôle, la durée de validité.
- Signature — la signature qui garantit l'intégrité du jeton.
Un jeton JWT ressemble à ceci : eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
JWT est autonome : le serveur n'a pas besoin de stocker les sessions dans une base de données, toutes les informations sont déjà encodées dans le jeton.
2. Configuration du projet ASP.NET Core pour l'autorisation JWT
Créons un nouveau projet ASP.NET Core Web API et configurons l'autorisation JWT.
Étape 1 : Installation des packages NuGet
Pour travailler avec JWT, nous avons besoin du package Microsoft.AspNetCore.Authentication.JwtBearer. Installez-le via le gestionnaire de packages NuGet ou la console :
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearerÉtape 2 : Configuration de appsettings.json
Ajoutez une section pour stocker les paramètres JWT (clé secrète, émetteur, audience) :
{ "Jwt": { "Key": "YourSuperSecretKey123!@#$%^&*()", "Issuer": "YourApp", "Audience": "YourAppUsers", "ExpireMinutes": 60 }}Étape 3 : Configuration de Program.cs
Dans le fichier Program.cs (ou Startup.cs pour les anciennes versions), nous ajoutons les services d'authentification et le middleware :
using Microsoft.AspNetCore.Authentication.JwtBearer;using Microsoft.IdentityModel.Tokens;using System.Text;
var builder = WebApplication.CreateBuilder(args);
// Configuration de l'authentification JWTbuilder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true,