Usa IA para integrar Auth0
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 con agent skills.Instala:Después, pídele a tu asistente de IA:Tu asistente de IA creará automáticamente tu aplicación de Auth0, obtendrá las credenciales, añadirá la dependencia del SDK Auth0.swift, configurará Auth0.plist, establecerá las URL de callback e implementará los flujos de login y Logout. Documentación completa de agent skills →
Primeros pasos
Crear un proyecto nuevo
Cree un nuevo proyecto de iOS o macOS para este inicio rápido.En Xcode:
- File → New → Project (o ⌘+Mayús+N)
- Seleccione una de estas opciones:
- Pestaña iOS → plantilla App
- Pestaña macOS → plantilla App
- Configure el proyecto:
- Product Name:
Auth0-Sample - Interface: SwiftUI
- Language: Swift
- Use Core Data: Desactivado
- Include Tests: Activado (recomendado)
- Product Name:
- Elija una ubicación y haga clic en Create
Agrega el SDK de Auth0
Agrega el SDK de Auth0 a tu proyecto con el gestor de paquetes que prefieras.
- Swift Package Manager
- CocoaPods
- Carthage
En Xcode:
- File → Add Package Dependencies… (o ⌘+Shift+K)
- Ingresa la URL del SDK de Auth0:
- Add Package → Selecciona el target de tu app → Add Package
Configurar Auth0
Cree una nueva aplicación en Auth0 y configure las URL de callback.
- Vaya a Auth0 Dashboard
- Applications > Create Application > Asígnele un nombre, seleccione Native > Create
- En la pestaña Settings, anote su ID de cliente y dominio
- Agregue las siguientes URL a Allowed Callback URLs:
- iOS
- macOS
- Agregue las siguientes URL a Allowed Logout URLs:
- iOS
- macOS
- Haga clic en Save Changes
Configurar las credenciales de la aplicación
Crea Arrastra
Auth0.plist en el directorio del proyecto:Auth0.plist
Auth0.plist a Xcode y asegúrate de que la opción “Add to target” esté seleccionada.Crear el servicio de autenticación
Cree
AuthenticationService.swift:- Haga clic derecho en su proyecto → New File… → Swift File
- Asígnele el nombre
AuthenticationService - Reemplace el contenido con:
AuthenticationService.swift
Configurar el flujo de autenticación (opcional)
Para mejorar la experiencia del usuario, puede minimizar las alertas del sistema de las siguientes maneras:
- Use Universal Links: esto elimina el mensaje ‘¿Abrir en “AppName”?’ que aparece durante la redirección. Nota: la alerta de permiso de ASWebAuthenticationSession seguirá apareciendo.
- Use sesiones efímeras: esto elimina todas las alertas de permiso. Nota: esto desactiva el inicio de sesión único (SSO) y las cookies compartidas.
- Universal Links
- Sesión efímera
- Auth0 Dashboard → Applications → Su aplicación → Settings → Advanced Settings → Device Settings
- Agregue Apple Team ID y bundle identifier → Save
- Xcode: Target → Signing & Capabilities → + Capability → Associated Domains
- Agregue:
webcredentials:{yourDomain}
Punto de control¡Ya tienes un inicio de sesión con Auth0 totalmente funcional en tu aplicación para iOS o macOS!
Solución de problemas y opciones avanzadas
Problemas comunes y soluciones
Problemas comunes y soluciones
Errores de compilación: no se encuentra el módulo ‘Auth0’
Soluciones:- Swift Package Manager: Revisa Package Dependencies → Verifica que
Auth0.swiftfigure en la lista - CocoaPods: Asegúrate de abrir el archivo
.xcworkspace, no.xcodeproj - Carthage: Verifica que
Auth0.xcframeworkesté agregado en Frameworks, Libraries, and Embedded Content - Limpia y vuelve a compilar: ⌘+Shift+K y luego ⌘+R
- Reinicia Xcode si es necesario
La app se cierra: ‘Auth0.plist not found’
Solución:- Verifica que
Auth0.plistesté en el navegador del proyecto de Xcode - Selecciona el archivo → Inspector → Asegúrate de que el target de tu app esté marcado
- Confirma que tenga las claves
ClientIdyDomaincon tus valores - Alternativa: Usa configuración programática (consulta la sección de integración avanzada a continuación)
El navegador se abre, pero nunca regresa a la app
Solución:- Comprueba que las URL de callback en Auth0 Dashboard coincidan exactamente con tu identificador de paquete y la plataforma
- Para iOS: las URL deben contener
/ios/; para macOS:/macos/ - Verifica que el identificador de paquete en Xcode coincida con la configuración de Auth0
- Asegúrate de que no haya errores tipográficos en las URL (los más comunes: dos puntos faltantes o formato de dominio incorrecto)
- Si usas un dominio personalizado: Verifica que estés usando tu dominio personalizado, no el dominio de Auth0
La alerta de permisos aparece cada vez
Este es el comportamiento de seguridad estándar de iOS/macOS al usar esquemas de URL personalizados. Consulta el Paso 6 para eliminar esta alerta usando Universal Links o Ephemeral Sessions.Configuración de dominio personalizado
Configuración de dominio personalizado
Si usas un dominio personalizado, usa ese valor en lugar de tu dominio de Auth0 en todas partes.Ejemplo: Usa
login.example.com en lugar de tenant.auth0.comEsto es necesario para que ciertas funciones funcionen correctamente:- Actualiza
Auth0.plistcon tu dominio personalizado - Usa el dominio personalizado en las URL de callback/logout
- Para Universal Links, usa:
webcredentials:login.example.com
Implementación en producción
Implementación en producción
Preparación para App Store
- Configura Universal Links para eliminar la alerta de permisos
- Haz pruebas en varias versiones de la plataforma y tamaños de dispositivo
- Implementa un manejo de errores adecuado para fallos de red
- Agrega descripciones de uso de privacidad si usas Keychain con biometría
- Sigue las directrices de revisión de App Store para los flujos de autenticación
Prácticas recomendadas de seguridad
- Nunca registres datos de autenticación sensibles en producción
- Implementa el cumplimiento de App Transport Security (ATS)
- Usa HTTPS para todas las solicitudes de red
- NO fijes certificados de la API de Auth0: Auth0 no recomienda esta práctica
Optimización del rendimiento
- Todas las operaciones asíncronas usan correctamente
@MainActorpara actualizar la UI - Las propiedades
@Publishedusan un manejo de memoria adecuado - Las credenciales se almacenan en caché de forma segura en el Keychain para acceso sin conexión
- El perfil de usuario se obtiene del token de ID (sin ninguna solicitud de red adicional)
Integración avanzada
Integración avanzada
Configuración programática
En lugar de usarAuth0.plist, puedes pasar las credenciales directamente en el código. Esto es útil cuando las credenciales deben ser dinámicas o específicas del entorno (p. ej., distintos inquilinos de Auth0 para desarrollo/preproducción/producción).Sustituye las llamadas a Auth0.webAuth() por Auth0.webAuth(clientId:domain:):Seguridad reforzada de Keychain con biometría
Exige Face ID o Touch ID para acceder a las credenciales almacenadas:Renovación automática de tokens
CredentialsManager renueva automáticamente los tokens de acceso caducados:Credenciales compartidas entre extensiones de la app
Para widgets, extensiones de la app o tareas en segundo plano que necesiten tokens de acceso:- Habilita la capacidad App Groups en Xcode para todos los targets
- Usa el mismo identificador de grupo de apps en todos los targets
- Configura el
CredentialsManagercompartido en cada target
Comparación de opciones del flujo de autenticación
| Característica | Universal Links | Sesión efímera | Por defecto (alerta) |
|---|---|---|---|
| Alerta de permisos | Reducida (sin aviso de redirección) | Ninguna | Muestra todas las alertas |
| Compatibilidad con SSO | Sí | No | Sí |
| Cuenta de desarrollador de Apple | Obligatoria | No obligatoria | No obligatoria |
| Experiencia de usuario | Mejor | Buena | Aceptable |
| Complejidad de configuración | Media | Fácil | Fácil |
| Compatibilidad con navegación privada | Sí | Sí | No |
- Apps de producción con SSO: Universal Links (mejor UX, compatibilidad con SSO, requiere una cuenta de desarrollador de Apple)
- Apps de producción sin SSO: Sesiones efímeras (sin alertas, configuración más sencilla)
- Pruebas/desarrollo: Sesiones efímeras (configuración rápida, UX más limpia)
- Inicio rápido/prototipado: Opción predeterminada con alertas (sin configuración, puedes migrar más adelante)