OAuth 2.0 et autorisation JWT en C# : guide pas à pas pour débutants

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction à OAuth 2.0 et JWT en C#

\n

Les applications web modernes nécessitent des mécanismes de sécurité fiables. Deux protocoles clés — OAuth 2.0 et JWT (JSON Web Token) — sont devenus la norme de facto pour l'implémentation de l'autorisation et de l'authentification. Dans cet article, nous allons voir comment utiliser ces technologies dans l'écosystème C# (.NET).

\n

OAuth 2.0 est un protocole d'accès délégué qui permet aux applications d'obtenir un accès limité aux ressources d'un utilisateur sans transmettre ses identifiants. JWT, quant à lui, est un format de jeton compact et autonome souvent utilisé pour transmettre des informations d'authentification entre le client et le serveur.

\n

Dans ce guide, nous allons créer une simple API web en ASP.NET Core implémentant OAuth 2.0 avec des jetons JWT. Vous apprendrez à configurer la génération, la validation et la protection des points de terminaison.

\n\n

Qu'est-ce que OAuth 2.0 et JWT ?

\n

Avant de passer au code, examinons les concepts de base.

\n

OAuth 2.0

\n

OAuth 2.0 définit quatre rôles :

\n
    \n
  • Resource Owner (propriétaire de la ressource) — généralement l'utilisateur.
  • \n
  • Client (client) — l'application qui souhaite obtenir l'accès.
  • \n
  • Authorization Server (serveur d'autorisation) — délivre les jetons.
  • \n
  • Resource Server (serveur de ressources) — fournit les données protégées.
  • \n
\n

Le flux principal Authorization Code Grant comprend : la redirection de l'utilisateur vers le serveur d'autorisation, l'obtention d'un code, l'échange du code contre un jeton d'accès.

\n\n

JWT (JSON Web Token)

\n

Un JWT se compose de trois parties séparées par des points :

\n
    \n
  • Header — le type de jeton et l'algorithme de signature (par exemple, HS256).
  • \n
  • Payload — les données (claims), telles que l'ID utilisateur, le rôle, la date d'expiration.
  • \n
  • Signature — la signature créée à l'aide d'une clé secrète.
  • \n
\n

Exemple de JWT : eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

\n\n

Configuration du projet ASP.NET Core

\n

Créons un nouveau projet d'API web avec prise en charge de l'authentification.

\n
dotnet new webapi -n OAuthJwtDemo\ncd OAuthJwtDemo
\n

Ajoutons les packages NuGet nécessaires :

\n
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer\ndotnet add package System.IdentityModel.Tokens.Jwt
\n\n

Configuration dans appsettings.json

\n

Ajoutez une section pour les paramètres JWT dans le fichier appsettings.json :

\n
{\n  "JwtSettings": {\n    "SecretKey": "YOUR_SUPER_SECRET_KEY_AT_LEAST_32_CHARS",\n    "Issuer": "OAuthJwtDemo",\n    "Audience": "OAuthJwtDemoClient",\n    "ExpirationMinutes": 60\n  }\n}
\n

Important : Dans un projet réel, stockez la clé secrète dans User Secrets ou Azure Key Vault.

\n\n

Implémentation du service de génération JWT

\n

Créons une interface et son implémentation pour travailler avec les jetons.

\n

Interface IJwtService

\n
public interface IJwtService\n{\n    string GenerateToken(string userId, string role);\n    ClaimsPrincipal ValidateToken(string token);\n}
\n\n

Implémentation de JwtService

\n
public class JwtService : IJwtService\n{\n    private readonly JwtSettings _settings;\n\n    public JwtService(IOptions<JwtSettings> settings)\n    {\n        _settings = settings.Value;\n    }\n\n    public string GenerateToken(string userId, string role)\n    {\n        var claims = new[]\n        {\n            new Claim(ClaimTypes.NameIdentifier, userId),\n            new Claim(ClaimTypes.Role, role),\n            new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())\n        };\n\n        var key = new Symmetric                

Blogs

Book Recommendations