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 añadir la autenticación de Auth0 automáticamente en cuestión de minutos mediante agent skills.Instala:
npx skills add auth0/agent-skills --skill auth0-quickstart --skill auth0-net-android --skill auth0-net-ios
Luego, pídele a tu asistente de IA:
Add Auth0 authentication to my .NET Android & iOS app
Tu asistente de IA creará automáticamente tu aplicación en Auth0, obtendrá las credenciales, instalará el SDK Auth0 OidcClient, configurará opciones específicas de cada plataforma e implementará los flujos de inicio y cierre de sesión. Documentación completa de agent skills →

Primeros pasos

1

Crear un proyecto nuevo de .NET

Cree un nuevo proyecto de .NET MAUI o de .NET Android/iOS para esta guía de inicio rápido.
En Visual Studio 2022 o una versión posterior:
  1. ArchivoNuevoProyecto
  2. Seleccione la plantilla .NET MAUI App
  3. Configure el proyecto:
    • Nombre del proyecto: Auth0MauiSample
    • Ubicación: Elija la ubicación que prefiera
    • Framework: .NET 8.0 o una versión posterior
  4. Haga clic en Crear
Esta guía de inicio rápido se centra en .NET Android y .NET iOS, que son la nueva generación de Xamarin.Android y Xamarin.iOS. Si aún usa Xamarin, puede seguir esta guía, ya que la integración es idéntica y los SDK son compatibles.
2

Instalar el SDK de Auth0

Agrega el SDK de cliente OIDC de Auth0 a tu proyecto.
Abre la Consola del Administrador de paquetes (VerOtras ventanasConsola del Administrador de paquetes) e instala el paquete adecuado:Para .NET Android:
Package Manager Console
Install-Package Auth0.OidcClient.AndroidX
Para .NET iOS:
Package Manager Console
Install-Package Auth0.OidcClient.iOS
Para .NET MAUI (ambas plataformas):
Package Manager Console
Install-Package Auth0.OidcClient.MAUI
El SDK de cliente OIDC de Auth0 se encarga de todos los detalles de los protocolos OAuth 2.0 y OIDC, y proporciona una API sencilla para la autenticación.
3

Configura tu aplicación de Auth0

Crea una nueva aplicación en tu inquilino de Auth0 y configúrala para dispositivos móviles.
  1. Ve al Auth0 Dashboard
  2. Haz clic en ApplicationsApplicationsCreate Application
  3. Introduce un nombre para tu aplicación, selecciona Native como tipo de aplicación y haz clic en Create
  4. Ve a la pestaña Settings en la página de detalles de la aplicación
  5. Toma nota de tu Domain y tu Client ID; los necesitarás en el siguiente paso
Configurar Callback URLs:En la pestaña Settings, agrega las siguientes URL:Allowed Callback URLs:
YOUR_ANDROID_PACKAGE_NAME://{yourDomain}/android/YOUR_ANDROID_PACKAGE_NAME/callback
Reemplaza:
  • YOUR_ANDROID_PACKAGE_NAME por el nombre del paquete de tu aplicación (por ejemplo, com.mycompany.myapp)
  • {yourDomain} por tu dominio de Auth0 (por ejemplo, dev-abc123.us.auth0.com)
Ejemplo: com.mycompany.myapp://dev-abc123.us.auth0.com/android/com.mycompany.myapp/callback
Allowed Logout URLs:Usa las mismas URL que para las callback URLs.
Asegúrate de que las URL de callback y logout estén en minúsculas. Si las URL no coinciden, la autenticación fallará.
Allowed Callback URLs son esenciales para la seguridad: garantizan que los usuarios vuelvan de forma segura a tu aplicación después de autenticarse. Sin una URL coincidente, el proceso de inicio de sesión fallará.Allowed Logout URLs ofrecen una experiencia fluida cuando los usuarios cierran sesión, ya que los redirigen de vuelta a tu aplicación en lugar de dejarlos en una página de Auth0.
4

Inicializar el cliente de Auth0

Cree una instancia de Auth0Client para comunicarse con Auth0.
MainActivity.cs
using Auth0.OidcClient;
using Android.App;
using Android.Content;

[Activity(Label = "Auth0Sample", MainLauncher = true, Icon = "@drawable/icon",
    LaunchMode = LaunchMode.SingleTask)]
[IntentFilter(
    new[] { Intent.ActionView },
    Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
    DataScheme = "YOUR_ANDROID_PACKAGE_NAME",
    DataHost = "{yourDomain}",
    DataPathPrefix = "/android/YOUR_ANDROID_PACKAGE_NAME/callback")]
public class MainActivity : Activity
{
    private Auth0Client auth0Client;

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Inicializa el cliente de Auth0
        auth0Client = new Auth0Client(new Auth0ClientOptions
        {
            Domain = "{yourDomain}",
            ClientId = "{yourClientId}"
        }, this);
    }

    protected override async void OnNewIntent(Intent intent)
    {
        base.OnNewIntent(intent);
        Auth0.OidcClient.ActivityMediator.Instance.Send(intent.DataString);
    }
}
Reemplace YOUR_ANDROID_PACKAGE_NAME, {yourDomain} y {yourClientId} por sus valores reales. Asegúrese de que todo el texto de DataScheme, DataHost y DataPathPrefix esté en minúsculas.
IntentFilter registra la aplicación para manejar la URL de callback. LaunchMode.SingleTask garantiza que Android no cree una nueva instancia de la actividad cuando se invoque el callback.
Guarde su dominio de Auth0 y el ID de cliente en un archivo de configuración o en los ajustes de la aplicación, en lugar de codificarlos de forma fija, para facilitar el mantenimiento.
5

Implementar el inicio y cierre de sesión

Agrega métodos para gestionar la autenticación del usuario.Implementa el inicio de sesión:
Authentication.cs
public async Task LoginAsync()
{
    var loginResult = await auth0Client.LoginAsync();

    if (!loginResult.IsError)
    {
        // Autenticación exitosa
        var accessToken = loginResult.AccessToken;
        var idToken = loginResult.IdentityToken;
        var user = loginResult.User;

        // Guardar credenciales y actualizar la interfaz
        Console.WriteLine($"Logged in as: {user.FindFirst("name")?.Value}");
    }
    else
    {
        // Gestionar error de autenticación
        Console.WriteLine($"Login error: {loginResult.Error}");
    }
}
Implementa el cierre de sesión:
Authentication.cs
public async Task LogoutAsync()
{
    var logoutResult = await auth0Client.LogoutAsync();

    if (logoutResult == BrowserResultType.Success)
    {
        // Borrar credenciales almacenadas
        // Actualizar la interfaz al estado de sesión cerrada
        Console.WriteLine("Logged out successfully");
    }
}
El método LoginAsync() abre el navegador del sistema (o Chrome Custom Tabs en Android) para mostrar la página de Universal Login de Auth0. Después de la autenticación, el usuario vuelve a tu aplicación mediante la URL de devolución de llamada.
Agrega estos métodos a tu MainActivity (Android) o a un ViewController (iOS) y llámalos cuando los usuarios pulsen los botones de Login/Logout.
6

Ejecuta tu aplicación

Compila y ejecuta la aplicación.
Para Android:
  1. Selecciona un emulador de Android o un dispositivo conectado en el menú desplegable de dispositivos
  2. Presiona F5 o haz clic en el botón Run
  3. La aplicación se compilará, se implementará y se iniciará
Para iOS (requiere un host de compilación en Mac):
  1. Conéctate a tu host de compilación en Mac
  2. Selecciona un simulador o dispositivo iOS en el menú desplegable de dispositivos
  3. Presiona F5 o haz clic en el botón Run
Flujo esperado:
  1. La aplicación se abre con el botón Log In
  2. Toca Log In → Se abre el navegador/Chrome Custom Tab → Completa la autenticación
  3. Se redirige automáticamente a tu aplicación
  4. El usuario se autentica correctamente
En la primera ejecución, es posible que iOS te pida confirmar la apertura del navegador para autenticarse. Esto es normal y esperado.
Punto de controlAhora tiene una experiencia de inicio de sesión con Auth0 completamente funcional en su aplicación .NET para Android o iOS. La aplicación usa el navegador del sistema para una autenticación segura y gestiona automáticamente el flujo de devolución de llamada.

Acceder a la información del usuario

Tras autenticarse correctamente, puede acceder a la información del usuario desde el resultado del inicio de sesión.

Resultado de la autenticación

El método LoginAsync() devuelve un objeto LoginResult que contiene:
UserInfo.cs
var loginResult = await auth0Client.LoginAsync();

if (!loginResult.IsError)
{
    // Tokens de acceso
    var accessToken = loginResult.AccessToken;
    var idToken = loginResult.IdentityToken;
    var refreshToken = loginResult.RefreshToken;

    // Acceder a los claims del usuario
    var user = loginResult.User;
    var name = user.FindFirst("name")?.Value;
    var email = user.FindFirst("email")?.Value;
    var picture = user.FindFirst("picture")?.Value;

    Console.WriteLine($"Name: {name}");
    Console.WriteLine($"Email: {email}");
}

Recorrer todos los claims

Para ver toda la información disponible del usuario:
UserClaims.cs
if (!loginResult.IsError)
{
    foreach (var claim in loginResult.User.Claims)
    {
        Console.WriteLine($"{claim.Type}: {claim.Value}");
    }
}
Los claims exactos que se devuelven dependen de los alcances solicitados. Para obtener más información, consulta Uso de los alcances en la documentación de Auth0 OIDC Client.

Solicitar alcances personalizados

Para solicitar información adicional sobre el usuario, especifique los alcances al crear el Auth0Client:
CustomScopes.cs
var auth0Client = new Auth0Client(new Auth0ClientOptions
{
    Domain = "{yourDomain}",
    ClientId = "{yourClientId}",
    Scope = "openid profile email offline_access read:posts"
});

Solución de problemas y aspectos avanzados

El navegador no redirige a la aplicación

Soluciones:
  1. Verifica que las URL de callback en Auth0 Dashboard coincidan exactamente con el nombre del paquete o el identificador del bundle de tu aplicación
  2. Asegúrate de que las URL de callback estén en minúsculas
  3. Comprueba que DataScheme, DataHost y DataPathPrefix (Android), o el esquema de URL (iOS), coincidan con tu configuración
  4. Limpia y vuelve a compilar tu proyecto

La autenticación falla con el error “Invalid Callback URL”

Solución:
  • Comprueba de nuevo que tu URL de callback en Auth0 Dashboard coincida con este formato:
    • Android: packagename://yourdomain/android/packagename/callback
    • iOS: bundleidentifier://yourdomain/ios/bundleidentifier/callback
  • Asegúrate de que la URL esté en minúsculas
  • Verifica que el dominio en tu código coincida con el dominio en Auth0 Dashboard

LoginAsync() se bloquea o nunca termina

Soluciones:
  • Asegúrate de que el filtro de Intent (Android) o el esquema de URL (iOS) estén configurados correctamente
  • Comprueba que OnNewIntent() (Android) o OpenUrl() (iOS) llamen a ActivityMediator
  • Verifica que tu aplicación pueda abrir el navegador del sistema
  • Comprueba la conectividad de red

Error: “Default App must use Token Endpoint Authentication Method ‘None’”

Solución:
  1. Ve a la configuración de tu aplicación en Auth0 Dashboard
  2. Desplázate hasta Application Properties
  3. Establece Application Type como Native
  4. Establece Token Endpoint Authentication Method como None
  5. Haz clic en Save Changes

iOS: el navegador no se abre

Soluciones:
  • Verifica que Info.plist contenga la configuración correcta del esquema de URL
  • Comprueba que OpenUrl() esté implementado en AppDelegate
  • Asegúrate de que el destino de implementación de iOS sea compatible con tu versión del SDK de Auth0

Prácticas recomendadas de seguridad

  • Almacenamiento seguro de tokens: Usa el almacenamiento seguro específico de la plataforma (Android Keystore, iOS Keychain) para guardar tokens
  • Actualización de tokens: Implementa el manejo del Token de actualización para mantener las sesiones de usuario
  • Certificate Pinning: Considera el anclaje de certificados para reforzar la seguridad de la API
  • ProGuard/Code Obfuscation: Agrega las reglas adecuadas si usas ofuscación de código en Android

Requisitos de App Store

  • Política de privacidad: Asegúrate de que tu aplicación tenga una política de privacidad que describa el uso de Auth0
  • Manejo de datos de usuario: Sigue las directrices de la plataforma para manejar los datos de autenticación del usuario
  • Deep Linking: Prueba exhaustivamente el manejo de las URL de callback en distintos escenarios
  • Requisitos de red: Maneja correctamente los escenarios sin conexión

Optimización del rendimiento

  • Almacena Auth0Client en caché: Crea una única instancia y reutilízala en toda tu aplicación
  • Carga diferida: Inicializa Auth0Client solo cuando sea necesario
  • Actualización en segundo plano: Implementa la actualización de tokens en segundo plano para sesiones de larga duración

Alcances personalizados y audiencia

Solicita alcances específicos y establece una audiencia para tu API:
AdvancedAuth.cs
var auth0Client = new Auth0Client(new Auth0ClientOptions
{
    Domain = "{yourDomain}",
    ClientId = "{yourClientId}",
    Scope = "openid profile email offline_access read:posts write:posts",
    Audience = "https://myapi.example.com"
});

var loginResult = await auth0Client.LoginAsync();

Parámetros adicionales

Pasa parámetros adicionales en la solicitud de autorización:
ExtraParams.cs
var extraParameters = new Dictionary<string, string>
{
    { "prompt", "login" },
    { "ui_locales", "es" },
    { "custom_param", "value" }
};

var loginResult = await auth0Client.LoginAsync(extraParameters);

Tokens de actualización

Usa tokens de actualización para obtener nuevos tokens de acceso sin que el usuario tenga que interactuar:
RefreshToken.cs
var refreshResult = await auth0Client.RefreshTokenAsync(loginResult.RefreshToken);

if (!refreshResult.IsError)
{
    var newAccessToken = refreshResult.AccessToken;
    var newIdToken = refreshResult.IdentityToken;
    // Guarda los nuevos tokens
}
Para recibir un token de actualización, incluye el scope offline_access en tu solicitud de autenticación.

Configuración del navegador específica para cada plataforma

Android - Usa Chrome Custom Tabs con colores personalizados:
AndroidBrowser.cs
var auth0Client = new Auth0Client(new Auth0ClientOptions
{
    Domain = "{yourDomain}",
    ClientId = "{yourClientId}",
    Browser = new AndroidBrowser
    {
        ToolbarColor = Android.Graphics.Color.ParseColor("#FF6B35")
    }
}, this);
iOS - Usa SFSafariViewController con una presentación personalizada:
iOSBrowser.cs
var auth0Client = new Auth0Client(new Auth0ClientOptions
{
    Domain = "{yourDomain}",
    ClientId = "{yourClientId}",
    Browser = new ASWebAuthenticationSessionBrowser
    {
        PrefersEphemeralWebBrowserSession = false
    }
});

Próximos pasos

Configurar proveedores de identidad

Agregue proveedores de inicio de sesión social como Google, Facebook y GitHub

Habilitar la autenticación multifactor

Agregue una capa adicional de seguridad con MFA

Protección contra ataques

Aprenda a protegerse de ataques de fuerza bruta y bots

Personalizar la experiencia de inicio de sesión

Personalice la página de Universal Login para que refleje su marca