Código de Autorización con PKCE es el patrón OAuth estándar para aplicaciones Expo. Esta página cubre la configuración de URI de redirección, cableado de expo-auth-session y peculiaridades específicas de proveedores para Google y Apple en SDK 57.
Genera un code_verifier aleatorio y envía su hash SHA-256 como code_challenge en la solicitud de autorización
Envía el code_verifier original cuando intercambies el código de autorización por tokens
expo-auth-session genera pares PKCE automáticamente cuando usePKCE: true - la generación manual es para backends personalizados
Nunca uses flujo implícito (response_type=token) - los tokens de acceso en URLs de redirección se escapan a través de registros y encabezados de referrer
Relacionado:Mobile Auth Basics - normalizar tokens OAuth en tu tipo Session
Google requiere IDs de cliente OAuth separados por plataforma.
Google Cloud Console - APIs & Services - Credentials┌─────────────────┬──────────────────────────────────────────────┐│ Tipo de cliente │ Usado para │├─────────────────┼──────────────────────────────────────────────┤│ iOS │ Bundle ID: com.example.myapp ││ Android │ Package + huella dactilar de cert de firma ││ Web │ Intercambio de código backend (secreto) │└─────────────────┴──────────────────────────────────────────────┘
// Usa el ID de cliente de iOS o Android en la aplicación - NO el secreto de cliente webconst GOOGLE_CLIENT_ID = Platform.select({ ios: process.env.EXPO_PUBLIC_GOOGLE_IOS_CLIENT_ID, android: process.env.EXPO_PUBLIC_GOOGLE_ANDROID_CLIENT_ID, default: process.env.EXPO_PUBLIC_GOOGLE_WEB_CLIENT_ID,});
Android requiere el SHA-1 de tu clave de subida y clave de firma de aplicación de Play Console - añade ambos a Google Cloud
iOS usa el ID de cliente invertido como esquema de URL al usar Google SDK - con expo-auth-session, tu scheme de aplicación maneja la redirección
El ID de cliente web es para intercambio de tokens del lado del servidor - su secreto permanece en el backend
Habilita Google People API o solo scopes relevantes después de revisión de privacidad - cada scope dispara declaraciones de Data Safety de Play
Errores comunes:
Error
Solución
redirect_uri_mismatch
Copia la salida exacta de makeRedirectUri() en consola de Google
invalid_client en Android
Añade el SHA-1 correcto para el perfil de compilación que estés probando
access_denied
Pantalla de consentimiento OAuth en modo Testing - añade usuarios de prueba
Antes de enviar OAuth:□ redirectUri registrado para esquema de producción (myapp://)□ SHA-1 de Android de Google coincide con keystore de producción de EAS□ Entitlement de Apple Sign In presente en perfil de aprovisionamiento□ Backend valida code_verifier (PKCE)□ Tokens de actualización almacenados en SecureStore - no AsyncStorage□ Probado en dispositivo físico con compilación de desarrollo - no solo Expo Go□ OAuth probado después de cierre + relanzamiento de aplicación (inicio en frío con actualización)
Expo Go usa el identificador de bundle de Expo - las credenciales de producción de Google/Apple no coincidirán
Construye un cliente de desarrollo (expo-dev-client) con tu Bundle ID real antes de pruebas de integración OAuth
Staging y producción deben usar clientes OAuth separados - previene que tokens de staging funcionen contra APIs de producción