Biblioteca Cliente OAuth para C# (.NET): implementación de autorización segura
En el desarrollo web moderno, la integración con servicios externos (Google, GitHub, Facebook, etc.) a través del protocolo OAuth 2.0 se ha convertido en un estándar de facto. Para la plataforma .NET existen varias soluciones maduras, pero una de las más flexibles y eficientes es la biblioteca Cliente OAuth para C# (.NET), disponible a través del paquete NuGet OAuthClient.Net. Esta biblioteca proporciona a los desarrolladores un conjunto completo de herramientas para implementar Authorization Code Flow, Implicit Grant y Client Credentials Flow.
Características principales de la biblioteca
- Soporte para todos los proveedores OAuth 2.0 populares — Google, GitHub, Microsoft, Facebook, VK, Yandex y servidores personalizados.
- Gestión automática de tokens — obtención de Access Token, Refresh Token, actualización automática al expirar.
- Protección integrada contra ataques CSRF — generación y verificación de parámetros state.
- Trabajo asíncrono — todos los métodos admiten async/await.
- Configuración flexible — configuración mediante código o archivo JSON.
- Extensibilidad — posibilidad de agregar proveedores personalizados a través de interfaces.
Instalación y configuración
La instalación se realiza a través del NuGet Package Manager:
Install-Package OAuthClient.Net -Version 2.1.0O mediante .NET CLI:
dotnet add package OAuthClient.Net --version 2.1.0Después de la instalación, es necesario importar el espacio de nombres:
using OAuthClient;using OAuthClient.Models;using OAuthClient.Providers;Ejemplo básico: autorización a través de Google
Consideremos el escenario más simple: obtener datos del usuario de Google después de una autorización exitosa.
public async Task<UserInfo> AuthenticateWithGoogleAsync(){ // Configuración del proveedor var googleProvider = new GoogleOAuthProvider( clientId: "YOUR_GOOGLE_CLIENT_ID", clientSecret: "YOUR_GOOGLE_CLIENT_SECRET", redirectUri: "https://yourapp.com/oauth/callback" );
// Creación del cliente var oauthClient = new OAuthClient(googleProvider);
// Generación de URL para redirigir al usuario string authUrl = oauthClient.GetAuthorizationUrl( scope: new[] { "openid", "profile", "email" }, state: Guid.NewGuid().ToString() );
// Después de que el usuario regrese a la URL de callback: // Extraemos el código del parámetro query "code" string authorizationCode = HttpContext.Request.Query["code"];
// Intercambio del código por un token var tokenResponse = await oauthClient.ExchangeCodeForTokenAsync(authorizationCode);
// Obtención de información del usuario var userInfo = await oauthClient.GetUserInfoAsync(tokenResponse.AccessToken);
return userInfo;}Trabajo con Refresh Token
Para sesiones de larga duración, la biblioteca gestiona automáticamente la renovación de tokens. Ejemplo de guardado y restauración de sesión:
// Guardar el Refresh Token después de la primera autorizaciónstring refreshToken = tokenResponse.RefreshToken;// Guárdelo en la base de datos o en un almacenamiento seguro
// Restauración de sesión: obtención de un nuevo Access Tokenvar newTokenResponse = await oauthClient.RefreshAccessTokenAsync(refreshToken);
// Actualización automática (lógica integrada)oauthClient.TokenRefreshed += (sender, args) =>{ // Registramos o guardamos el nuevo Refresh Token Console.WriteLine($"Nuevo Refresh Token: {args.NewRefreshToken}");};Proveedor OAuth personalizado
Si es necesario conectarse a un servicio que no está en la lista de proveedores integrados, la biblioteca permite crear uno propio:
public class CustomProvi