Introduction : pourquoi OAuth 2.0 et JWT sont-ils nécessaires dans les applications modernes ?
\nDans le développement web moderne, la sécurité des données et la gestion des accès deviennent primordiales. Chaque jour, des millions d'utilisateurs se connectent à des applications via Google, Facebook ou des systèmes d'entreprise sans transmettre directement leurs mots de passe. C'est là qu'interviennent les protocoles OAuth 2.0 et la technologie JWT (JSON Web Tokens).
\nOAuth 2.0 est une norme industrielle pour la délégation d'accès. Elle permet aux applications d'obtenir un accès limité aux ressources d'un utilisateur sans divulguer ses identifiants. JWT, quant à lui, est un format de jeton compact et autonome qui contient toutes les informations nécessaires à l'authentification et à l'autorisation.
\nDans cet article, nous allons voir en pratique comment implémenter OAuth 2.0 et l'autorisation JWT en C# avec ASP.NET Core. Vous apprendrez à configurer un serveur d'autorisation, générer des jetons et protéger vos points de terminaison API. Tous les exemples de code sont prêts à être utilisés dans des projets réels.
\n\n1. Configuration du serveur d'autorisation avec IdentityServer4
\nPour implémenter OAuth 2.0, nous utiliserons la bibliothèque populaire IdentityServer4 — un framework pour ASP.NET Core qui implémente les protocoles OpenID Connect et OAuth 2.0. Commençons par créer un serveur d'autorisation minimal.
\n\nÉtape 1 : Installation des packages et création du projet
\nCréez un nouveau projet ASP.NET Core Web Application (modèle vide) et installez les packages NuGet nécessaires :
\ndotnet add package IdentityServer4\ndotnet add package Microsoft.AspNetCore.Authentication.JwtBearer\n\nÉtape 2 : Configuration des clients et des ressources
\nDéfinissez des utilisateurs de test, des clients et des ressources protégées. Créez la classe Config.cs :
public static class Config\n{\n public static IEnumerable<IdentityResource> IdentityResources =>\n new[] { new IdentityResources.OpenId(), new IdentityResources.Profile() };\n\n public static IEnumerable<ApiScope> ApiScopes =>\n new[] { new ApiScope("api1", "My API") };\n\n public static IEnumerable<Client> Clients =>\n new[]\n {\n new Client\n {\n ClientId = "client",\n AllowedGrantTypes = GrantTypes.ClientCredentials,\n ClientSecrets = { new Secret("secret".Sha256()) },\n AllowedScopes = { "api1" }\n }\n };\n}\n\nÉtape 3 : Enregistrement des services dans Startup.cs
\nConfigurez IdentityServer dans la méthode ConfigureServices :
public void ConfigureServices(IServiceCollection services)\n{\n services.AddIdentityServer()\n .AddInMemoryIdentityResources(Config.IdentityResources)\n .AddInMemoryApiScopes(Config.ApiScopes)\n .AddInMemoryClients(Config.Clients)\n .AddTestUsers(TestUsers.Users);\n\n services.AddAuthentication()\n .AddJwtBearer("Bearer", options =>\n {\n options.Authority = "https://localhost:5001";\n options.TokenValidationParameters = new TokenValidationParameters\n {\n ValidateAudience = false\n };\n });\n}\nDans la méthode Configure, ajoutez l'appel app.UseIdentityServer().
2. Implémentation des jetons JWT : génération et validation
\nUn jeton JWT se compose de trois parties : l'en-tête (header), la charge utile (payload) et la signature (signature). Dans .NET, la génération et la vérification des JWT s'effectuent à l'aide de mécanismes intégrés.
\n\nGénération manuelle d'un jeton JWT
\nIl est parfois nécessaire de créer un jeton manuellement, par exemple pour les tests. Utilisez le code suivant :
\nusing System.IdentityModel.Tokens.Jwt;\nusing Microsoft.IdentityModel.Tokens;\nusing System.Security.Claims;\nusing System.Text;\n\npublic string GenerateJwtToken(string userI