Saltar al contenido principal

Usa IA para integrar Auth0

Si usas un asistente de programación con IA como Claude Code, Cursor o GitHub Copilot, puedes agregar la autenticación de Auth0 automáticamente en cuestión de minutos con agent skills.Instala:
npx skills add auth0/agent-skills --skill auth0-quickstart --skill auth0-wpf --skill auth0-winforms
Luego, pídele a tu asistente de IA:
Add Auth0 authentication to my WPF or WinForms app
Tu asistente de IA creará automáticamente tu aplicación de Auth0, obtendrá las credenciales, instalará el SDK Auth0 OidcClient, configurará las URL de callback e implementará los flujos de inicio y cierre de sesión. Consulta la documentación completa de agent skills →
Requisitos previos: Antes de comenzar, asegúrate de tener lo siguiente:Compatibilidad de versiones de .NET: Esta guía de inicio rápido funciona con .NET 8.0, .NET 9.0 y .NET Framework 4.6.2.

Primeros pasos

Esta guía de inicio rápido muestra cómo agregar la autenticación de Auth0 a una aplicación de escritorio WPF o WinForms. Configurará Auth0, instalará el SDK y añadirá el inicio de sesión, el cierre de sesión y la visualización del perfil del usuario mediante Auth0 OIDC Client para WPF y WinForms.
1

Crea tu aplicación

Si ya tiene un proyecto de WPF o WinForms, pase al siguiente paso.
Cree un proyecto nuevo y abra su directorio:
dotnet new wpf -n MyApp
cd MyApp
2

Configurar Auth0

Para usar los servicios de Auth0, debes tener una aplicación configurada en el Auth0 Dashboard. En la aplicación de Auth0 configuras cómo funciona la autenticación de tu proyecto.

Configurar una aplicación

Ve a Auth0 DashboardApplicationsApplications y crea una aplicación nueva:
  1. Haz clic en Create Application
  2. Introduce un nombre para tu aplicación
  3. Selecciona Native como tipo de aplicación
  4. Haz clic en Create
En la pestaña Settings, toma nota de tu dominio y tu ID de cliente; los necesitarás para inicializar el SDK.

Configurar las URL de callback

Una URL de callback es una URL de tu aplicación a la que Auth0 redirige a los usuarios después de autenticarse. Si no se configura, los usuarios no volverán a tu aplicación después de iniciar sesión.En la configuración de tu aplicación, agrega lo siguiente a Allowed Callback URLs:
https://{yourDomain}/mobile

Configurar las URL de cierre de sesión

Una URL de cierre de sesión es una URL de tu aplicación a la que Auth0 redirige a los usuarios después de cerrar sesión. Si no se configura, los usuarios no podrán cerrar sesión en tu aplicación y recibirán un error.En la configuración de tu aplicación, agrega lo siguiente en Allowed Logout URLs:
https://{yourDomain}/mobile
3

Instala el SDK de Auth0

Auth0 ofrece paquetes NuGet independientes para WPF y WinForms. Instala el que corresponda al tipo de proyecto.
Abre la Consola del Administrador de paquetes (Tools → NuGet Package Manager → Package Manager Console) y ejecuta:
# WPF
Install-Package Auth0.OidcClient.WPF

# WinForms
Install-Package Auth0.OidcClient.WinForms
4

Crear una instancia de Auth0Client

Para integrar Auth0 en su aplicación, cree una instancia de Auth0Client con su dominio de Auth0 y su ID de cliente. Agregue un campo privado e inicialícelo dentro del constructor existente de la ventana principal o el formulario.
Abra MainWindow.xaml.cs y actualícelo de la siguiente manera:
MainWindow.xaml.cs
using Auth0.OidcClient;

// Si eligió un nombre diferente para su aplicación,
// asegúrese de actualizar el espacio de nombres según corresponda.
namespace MyApp; 

public partial class MainWindow : Window
{
    private Auth0Client _client;

    public MainWindow()
    {
        InitializeComponent();

        _client = new Auth0Client(new Auth0ClientOptions
        {
            Domain = "{yourDomain}",
            ClientId = "{yourClientId}"
        });
    }
}
5

Agrega el inicio de sesión a tu aplicación

Use el método LoginAsync() del SDK para iniciar sesión. Al llamarlo, se abre una ventana emergente con la página de Universal Login de Auth0. Después de autenticarse correctamente, Auth0 redirige a la URL de callback y el SDK devuelve un LoginResult.Primero, agregue un botón de inicio de sesión a la interfaz de usuario:
Abra MainWindow.xaml y agregue un Button dentro de <Grid>:
MainWindow.xaml
<Grid>
    <Button x:Name="LoginButton"
            Content="Log In"
            Width="120" Height="40"
            HorizontalAlignment="Center" VerticalAlignment="Center"
            Click="LoginButton_Click" />
</Grid>
Luego agregue el controlador del clic en MainWindow.xaml.cs:
MainWindow.xaml.cs
private async void LoginButton_Click(object sender, RoutedEventArgs e)
{
    var loginResult = await _client.LoginAsync();

    if (loginResult.IsError == false)
    {
        var user = loginResult.User;
        var name = user.FindFirst(c => c.Type == "name")?.Value;
        var email = user.FindFirst(c => c.Type == "email")?.Value;
        var picture = user.FindFirst(c => c.Type == "picture")?.Value;
    }
}
Si no hay errores, puede acceder a LoginResult.User, LoginResult.IdentityToken, LoginResult.AccessToken y LoginResult.RefreshToken en el resultado.
6

Agregue el cierre de sesión a su aplicación

Usa el método LogoutAsync() del SDK para cerrar la sesión de los usuarios. Esto abre una ventana emergente, redirige al endpoint de cierre de sesión de Auth0 para borrar la sesión y, a continuación, vuelve a redirigir a la URL de cierre de sesión que configuraste.Primero, agrega un botón de cierre de sesión a la interfaz de usuario:
Abre MainWindow.xaml y agrega un Button de cierre de sesión junto al botón de inicio de sesión:
MainWindow.xaml
    <Grid>

        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
            <Button x:Name="LoginButton" Content="Login" Width="200" Height="40" 
                    Margin="10" Click="LoginButton_Click" FontSize="16"/>
            <Button x:Name="LogoutButton" Content="Logout" Width="200" Height="40" 
                    Margin="10" Click="LogoutButton_Click" FontSize="16"/>
        </StackPanel>
    </Grid>
Luego, agrega el controlador del clic en MainWindow.xaml.cs:
MainWindow.xaml.cs
private async void LogoutButton_Click(object sender, RoutedEventArgs e)
{
    await _client.LogoutAsync();
}
7

Mostrar la información del perfil del usuario

La propiedad LoginResult.User es un ClaimsPrincipal que contiene el perfil del usuario autenticado. Consulta las notificaciones para mostrar la información del usuario en tu aplicación.
if (loginResult.IsError == false)
{
    Debug.WriteLine($"name: {loginResult.User.FindFirst(c => c.Type == "name")?.Value}");
    Debug.WriteLine($"email: {loginResult.User.FindFirst(c => c.Type == "email")?.Value}");
}
Para ver todas las claims devueltas en el token de ID:
if (loginResult.IsError == false)
{
    foreach (var claim in loginResult.User.Claims)
    {
        Debug.WriteLine($"{claim.Type} = {claim.Value}");
    }
}
Punto de controlAhora deberías tener una aplicación WPF o WinForms integrada con Auth0 y en funcionamiento. Ejecuta la aplicación y verifica lo siguiente:
  • Al hacer clic en el botón de inicio de sesión, se abre la página de Universal Login de Auth0 en una ventana emergente.
  • Puedes iniciar sesión o registrarte.
  • Después de la autenticación, puedes acceder a la información del usuario desde LoginResult.User.
  • Al hacer clic en el botón de cierre de sesión, se cierra la sesión y se te redirige a la URL de cierre de sesión.

Uso avanzado

Comprueba LoginResult.IsError antes de acceder a los tokens o a las propiedades del usuario. Las propiedades Error y ErrorDescription contienen detalles cuando la autenticación falla.
var loginResult = await _client.LoginAsync();

if (loginResult.IsError)
{
    Debug.WriteLine($"An error occurred during login: {loginResult.Error}");
    // loginResult.ErrorDescription contiene el mensaje de error completo
    return;
}

// Es seguro acceder aquí a los tokens y al usuario
Debug.WriteLine($"id_token: {loginResult.IdentityToken}");
Debug.WriteLine($"access_token: {loginResult.AccessToken}");
Si el usuario cierra la ventana emergente de inicio de sesión sin autenticarse, LoginAsync() devuelve un resultado con BrowserResultType.UserCancel. Este comportamiento es esperado; no lo trates como un error.
Para obtener un nuevo token de acceso sin que el usuario tenga que volver a iniciar sesión, usa RefreshTokenAsync() con el token de actualización del LoginResult inicial.
// Solicita el scope offline_access para recibir un token de actualización
_client = new Auth0Client(new Auth0ClientOptions
{
    Domain = "{yourDomain}",
    ClientId = "{yourClientId}",
    Scope = "openid profile email offline_access"
});

// Almacena el token de actualización del inicio de sesión inicial
var refreshToken = loginResult.RefreshToken;

// Intercámbialo por nuevos tokens más adelante
var refreshResult = await _client.RefreshTokenAsync(refreshToken);

if (refreshResult.IsError == false)
{
    var newAccessToken = refreshResult.AccessToken;
}
Los tokens de actualización requieren el scope offline_access y deben habilitarse en la configuración de tu aplicación de Auth0, en Refresh Token Rotation.

Recursos adicionales

Repositorio del SDK

Código fuente, notas de lanzamiento y seguimiento de incidencias de Auth0 OIDC Client for .NET

Perfiles de usuario

Más información sobre las reclamaciones del perfil de usuario y el endpoint /userinfo

Foro de la comunidad

Obtenga ayuda de la comunidad de Auth0

Problemas comunes

Problema: La ventana emergente de WebView2 se abre y muestra la página de inicio de sesión, pero después de introducir las credenciales no sucede nada.Solución: Microsoft Edge WebView2 Runtime no está instalado en el equipo. Instálalo desde la página de descarga de Microsoft WebView2. WebView2 viene incluido con Windows 11 y las versiones recientes de Windows 10, pero debe instalarse por separado en sistemas más antiguos.
Problema: Después de iniciar sesión, Auth0 devuelve un error callback URL mismatch.Solución: El URI de redirección que usa el SDK no coincide con ningún valor de Allowed Callback URLs en el Auth0 Dashboard. Agrega https://{yourDomain}/mobile a Allowed Callback URLs en la configuración de tu aplicación. El SDK usa esta URL de forma predeterminada.
Problema: Después de cerrar sesión, Auth0 devuelve un error sobre una URL de cierre de sesión no reconocida.Solución: Agrega https://{yourDomain}/mobile a Allowed Logout URLs en la configuración de tu aplicación.
Problema: LoginResult.IsError es true, pero no hay ninguna indicación clara de la causa.Solución: Revisa LoginResult.Error y LoginResult.ErrorDescription para obtener más información:
if (loginResult.IsError)
{
    Debug.WriteLine($"Error: {loginResult.Error}");
    Debug.WriteLine($"Description: {loginResult.ErrorDescription}");
}
Causas comunes:
  • El tipo de aplicación en el Auth0 Dashboard no está configurado como Native
  • OIDC Conformant no está habilitado en Advanced Settings → OAuth
  • JSON Web Token Signature Algorithm no está configurado como RS256
Problema: LoginResult.RefreshToken es null.Solución: El scope offline_access es necesario para recibir un Token de actualización. Agrégalo a la opción Scope:
_client = new Auth0Client(new Auth0ClientOptions
{
    Domain = "{yourDomain}",
    ClientId = "{yourClientId}",
    Scope = "openid profile email offline_access"
});
Asegúrate también de que Refresh Token Rotation esté habilitado en la configuración de tu aplicación en el Auth0 Dashboard.