Antes de comenzar
- Configura el SDK de Facebook Login - Instala y configura el Facebook Login SDK for iOS. Crea una aplicación de Facebook en developers.facebook.com. Cuando termines, tu aplicación debería tener Facebook Login funcionando.
- Configura Auth0 para Facebook Native - Configura tu aplicación de Auth0 para usar el inicio de sesión nativo de Facebook. Consulta Agregar Facebook Login a aplicaciones nativas.
Primeros pasos
Configurar los permisos de Facebook Login
Actualiza el botón de Facebook Login en tu
ViewController para solicitar los permisos correctos.Tu aplicación ya admite Facebook Login, pero para obtener un perfil de usuario más completo debes solicitar los permisos public_profile y email. También agregarás una llamada de retorno del delegado para iniciar el flujo de autenticación de Auth0.ViewController.swift
El permiso
email es opcional; el usuario debe dar su consentimiento para compartirlo. El correo electrónico que devuelve Facebook se marcará como no verificado en el perfil del usuario de Auth0.Instala y configura el SDK de Auth0
Agrega el SDK Auth0.swift a tu proyecto y configura las credenciales de tu aplicación.Agrega Auth0.swift con Swift Package Manager:Arrastra
- En Xcode, ve a File → Add Package Dependencies…
- Ingresa la URL del paquete:
https://github.com/auth0/Auth0.swift - Selecciona la versión más reciente y haz clic en Add Package
Auth0.plist:Ve a la sección Applications del Auth0 Dashboard y selecciona la aplicación en la que habilitaste Facebook Native Sign In. Copia los valores de dominio e ID de cliente.Crea un nuevo archivo de lista de propiedades llamado Auth0.plist en tu proyecto y agrega lo siguiente:Auth0.plist
Auth0.plist a Xcode y asegúrate de que Add to target esté marcado para el destino de tu aplicación.Obtener el token de acceso de la sesión de Facebook
Después de que Facebook Login se complete correctamente, obtén un token de acceso de sesión de la API de Facebook. Auth0 requiere este token para verificar la identidad del usuario en el backend.Haz una solicitud GET al endpoint
/oauth/access_token de Facebook mediante la clase GraphRequest:ViewController.swift
Los parámetros de consulta obligatorios son:
grant_type:fb_attenuate_tokenfb_exchange_token: la cadena del token delAccessTokende Facebookclient_id: el ID de tu aplicación de Facebook (ya está en tuInfo.plistde la configuración del SDK de Facebook)
Obtener el perfil de usuario de Facebook
Obtén el perfil del usuario desde Facebook. Auth0 usa estos datos para crear o actualizar el perfil del usuario en Auth0.
ViewController.swift
Canjear tokens por credenciales de Auth0
Usa el token de sesión y el perfil del usuario de los pasos anteriores para autenticarte con Auth0 y obtener tokens de Auth0.Llama a
login(facebookSessionAccessToken:profile:audience:scope:) en el cliente de autenticación de Auth0:ViewController.swift
Internamente, Auth0.swift usa el tipo de token
http://auth0.com/oauth/token-type/facebook-info-session-access-token para dirigir la solicitud a la conexión nativa de Facebook.VerificaciónAhora deberías poder autenticarte de forma nativa con Facebook. Si la aplicación de Facebook está instalada en el dispositivo, la autenticación se realiza directamente a través de la aplicación, sin necesidad de usar un navegador.
Solución de problemas y temas avanzados
Problemas comunes y soluciones
Problemas comunes y soluciones
El intercambio de tokens falla con un error de autenticación
Soluciones:- Verifica que tu aplicación de Auth0 tenga habilitado Facebook Native Sign In en el Dashboard
- Comprueba que
FacebookAppIDenInfo.plistcoincida con el ID de la aplicación en la consola de desarrolladores de Facebook - Asegúrate de que el archivo
Auth0.plistesté agregado al target correcto en Xcode - Confirma que el token de acceso de Facebook no haya expirado antes de llamar a
performLogin
La solicitud del token de sesión devuelve un error
Solución:- Verifica que
FacebookAppIDesté configurado correctamente enInfo.plist - Asegúrate de que
fb_exchange_tokensea la cadena sin procesar del token (accessToken.tokenString) - Comprueba que tu aplicación de Facebook no esté en modo de desarrollo si estás haciendo pruebas con usuarios que no son administradores
AuthenticationError: “Connection not found”
Solución:- Ve a Auth0 Dashboard → Authentication → Social
- Verifica que Sign in with Facebook esté habilitado
- Confirma que Facebook Native Social Login esté activado en la configuración de la conexión
- Comprueba que la aplicación de Auth0 esté asociada con la conexión de Facebook
Faltan campos en el perfil del usuario
- Confirma que
"email"y"public_profile"estén en el arrayfbLoginButton.permissions - Es posible que el usuario haya rechazado el permiso
email; maneja correctamente el caso de un correo electrónico nulo - Verifica que los mismos campos estén en la llamada
request.parameters["fields"]defetchUserProfile
No se encontró Auth0.plist
- Asegúrate de que el nombre del archivo sea exactamente
Auth0.plist(distingue entre mayúsculas y minúsculas) - En Xcode, comprueba el Target Membership del archivo: debe estar incluido en el target de tu aplicación
Consideraciones para producción
Consideraciones para producción
Prácticas recomendadas de seguridad
- Almacenamiento seguro de tokens: Usa
CredentialsManagerde Auth0.swift para almacenar los tokens de forma segura en el llavero de iOS - Tokens de actualización: Solicita el scope
offline_accessy usaCredentialsManagerpara renovar silenciosamente los tokens expirados - Protección biométrica: Habilita la autenticación biométrica en
CredentialsManagerpara proteger las credenciales almacenadas
Configuración de la aplicación de Facebook
- Cambia tu aplicación de Facebook de Development Mode a Live antes de publicarla en la App Store
- Asegúrate de que el Bundle ID de tu aplicación esté registrado en la consola de desarrolladores de Facebook
- Revisa los requisitos de la Data Policy de Facebook para las aplicaciones que usan el Login SDK
Envío a la App Store
- Incluye Facebook Login en la política de privacidad de tu aplicación y en la etiqueta de privacidad de la App Store
- Gestiona los casos en los que el usuario deniegue el permiso
email; tu aplicación debe funcionar sin él - Haz pruebas en un dispositivo real antes de enviar la app; el SDK de Facebook se comporta de manera diferente en los simuladores
Alternativa con Async/Await
Alternativa con Async/Await
Si tu app es compatible con iOS 15+, puedes usar async/await para escribir código más limpio y sin anidamiento:Envuelve cada método basado en callbacks en un
ViewController.swift
withCheckedThrowingContinuation para adaptarlo a async/await.Próximos pasos
Configurar otros proveedores de identidad
Añada Google, Apple y otros proveedores de inicio de sesión social
Protección contra ataques
Protéjase frente a ataques de fuerza bruta y de bots
Actions
Personalice los flujos de autenticación con código sin servidor
Referencia del SDK de iOS
Consulte la documentación completa del SDK Auth0.swift