Bibliothèque client OAuth pour C# (.NET) : implémentation d'une autorisation sécurisée
Dans le développement web moderne, l'intégration avec des services externes (Google, GitHub, Facebook, etc.) via le protocole OAuth 2.0 est devenue un standard de facto. Pour la plateforme .NET, il existe plusieurs solutions matures, mais l'une des plus flexibles et performantes est la bibliothèque Client OAuth pour C# (.NET), disponible via le package NuGet OAuthClient.Net. Cette bibliothèque offre aux développeurs un ensemble complet d'outils pour implémenter le flux de code d'autorisation (Authorization Code Flow), l'octroi implicite (Implicit Grant) et le flux d'identifiants client (Client Credentials Flow).
Fonctionnalités principales de la bibliothèque
- Prise en charge de tous les fournisseurs OAuth 2.0 populaires — Google, GitHub, Microsoft, Facebook, VK, Yandex et les serveurs personnalisés.
- Gestion automatique des jetons — obtention du jeton d'accès (Access Token), du jeton d'actualisation (Refresh Token), renouvellement automatique à l'expiration.
- Protection intégrée contre les attaques CSRF — génération et vérification des paramètres d'état (state).
- Fonctionnement asynchrone — toutes les méthodes prennent en charge async/await.
- Configuration flexible — configuration via code ou fichier JSON.
- Extensibilité — possibilité d'ajouter vos propres fournisseurs via des interfaces.
Installation et configuration
L'installation s'effectue via le gestionnaire de packages NuGet :
Install-Package OAuthClient.Net -Version 2.1.0Ou via l'interface CLI .NET :
dotnet add package OAuthClient.Net --version 2.1.0Après l'installation, il est nécessaire d'importer les espaces de noms :
using OAuthClient;using OAuthClient.Models;using OAuthClient.Providers;Exemple de base : autorisation via Google
Considérons le scénario le plus simple — l'obtention des données utilisateur de Google après une autorisation réussie.
public async Task<UserInfo> AuthenticateWithGoogleAsync(){ // Configuration du fournisseur var googleProvider = new GoogleOAuthProvider( clientId: "YOUR_GOOGLE_CLIENT_ID", clientSecret: "YOUR_GOOGLE_CLIENT_SECRET", redirectUri: "https://yourapp.com/oauth/callback" );
// Création du client var oauthClient = new OAuthClient(googleProvider);
// Génération de l'URL de redirection pour l'utilisateur string authUrl = oauthClient.GetAuthorizationUrl( scope: new[] { "openid", "profile", "email" }, state: Guid.NewGuid().ToString() );
// Après le retour de l'utilisateur sur l'URL de callback : // Extraction du code du paramètre de requête "code" string authorizationCode = HttpContext.Request.Query["code"];
// Échange du code contre un jeton var tokenResponse = await oauthClient.ExchangeCodeForTokenAsync(authorizationCode);
// Obtention des informations utilisateur var userInfo = await oauthClient.GetUserInfoAsync(tokenResponse.AccessToken);
return userInfo;}Utilisation du jeton d'actualisation (Refresh Token)
Pour les sessions de longue durée, la bibliothèque gère automatiquement le renouvellement des jetons. Exemple de sauvegarde et de restauration de session :
// Sauvegarde du jeton d'actualisation après la première autorisationstring refreshToken = tokenResponse.RefreshToken;// Enregistrez-le dans une base de données ou un stockage sécurisé
// Restauration de la session : obtention d'un nouveau jeton d'accèsvar newTokenResponse = await oauthClient.RefreshAccessTokenAsync(refreshToken);
// Renouvellement automatique (logique intégrée)oauthClient.TokenRefreshed += (sender, args) =>{ // Journalisation ou sauvegarde du nouveau jeton d'actualisation Console.WriteLine($"Nouveau jeton d'actualisation : {args.NewRefreshToken}");};Fournisseur OAuth personnalisé
Si vous devez vous connecter à un service qui ne figure pas dans la liste des fournisseurs intégrés, la bibliothèque permet d'en créer un personnalisé :
public class CustomProvi