Firebase Android Authentication failed: expired_token (El token Auth ha caducado)
Me encuentro con un problema con Android Firebase Auth que utiliza com.google.gms:google-services:3.0.0
y com.google.firebase:firebase-auth:9.0.1
.
1 hora después de la autenticación con Firebase (Google o Facebook), obtengo el siguiente error:
- Autenticación con OAuth2 para una aplicación * y * un sitio web
- ¿Cuál es la forma correcta de validar google concedido tokens OAuth en un servidor node.js?
- Función de sincronización requerida por cuenta de Google
- Android Studio - GoogleAuthUtil no se puede resolver
- ¿Cómo está comprobando Google SHA1 y el nombre del paquete en las llamadas de la API?
W/PersistentConnection: pc_0 - Authentication failed: expired_token (Auth token is expired)
¿Por qué el token Firebase expira después de 1 hora y cómo extender este período de vencimiento?
ACTUALIZAR
Todavía encuentro este problema, el token de Firebase expira después de 1 hora. Ahora obtengo el siguiente mensaje: W/PersistentConnection: pc_0 - Authentication failed: invalid_token (Invalid claim 'kid' in auth header.)
Aprecio cualquier ayuda.
- ¿Por qué Google Sign-In para Android devuelve un identificador de usuario "sub" que difiere de UserService.getCurrentUser () para cuentas de dominio alojadas?
- Token de acceso recuperado: null. Com.google.android.gms.auth.GoogleAuthException: Desconocido
- Com.google.android.gms.auth.GoogleAuthException: excepción getToken (origen desconocido)
- Autenticación con Facebook al principio y luego Google provoca un error en Firebase para Android
- Autenticación de la cuenta de servicio de Google de reaccionar
Si utilizamos los proveedores de autenticación predeterminados como (Google, Facebook, Email ..), actualizar la clave "SHA-1" de su aplicación en la consola firebase solucionaría el problema de expiración de token.
En esta discusión, un desarrollador de Google compartió una guía para resolver este problema.
Guía: https://drive.google.com/file/d/0B94LePkXiqa6SXVFd3N1NzJHX1E/view
Trate de implementar FirebaseInstanceIdService
para obtener un token de actualización.
Acceda al token de registro :
Puede acceder al valor del token extendiendo FirebaseInstanceIdService . Asegúrese de haber agregado el servicio a su manifiesto , luego llame a getToken
en el contexto de onTokenRefresh
y registre el valor como se muestra:
@Override public void onTokenRefresh() { // Get updated InstanceID token. String refreshedToken = FirebaseInstanceId.getInstance().getToken(); Log.d(TAG, "Refreshed token: " + refreshedToken); // TODO: Implement this method to send any registration to your app's servers. sendRegistrationToServer(refreshedToken); }
El onTokenRefreshcallback se activa siempre que se genera un nuevo token, por lo que llamar a
getToken
en su contexto asegura que está accediendo a un token de registro disponible actual.FirebaseInstanceID.getToken()
devuelve null si el token aún no se ha generado.
Código:
import android.util.Log; import com.google.firebase.iid.FirebaseInstanceId; import com.google.firebase.iid.FirebaseInstanceIdService; public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { private static final String TAG = "MyFirebaseIIDService"; /** * Called if InstanceID token is updated. This may occur if the security of * the previous token had been compromised. Note that this is called when the InstanceID token * is initially generated so this is where you would retrieve the token. */ // [START refresh_token] @Override public void onTokenRefresh() { // Get updated InstanceID token. String refreshedToken = FirebaseInstanceId.getInstance().getToken(); Log.d(TAG, "Refreshed token: " + refreshedToken); // TODO: Implement this method to send any registration to your app's servers. sendRegistrationToServer(refreshedToken); } // [END refresh_token] /** * Persist token to third-party servers. * * Modify this method to associate the user's FCM InstanceID token with any server-side account * maintained by your application. * * @param token The new token. */ private void sendRegistrationToServer(String token) { // Add custom implementation, as needed. } }
Espero que te ayude.
El nuevo tiempo de vida máximo para Firebase Tokens es de 1 hora – Lo leí en los documentos más temprano hoy.
En cuanto a Invalid claim 'kid' en el encabezado de la autenticación. , Obtengo exactamente 2 resultados de búsqueda en Google para eso (: No hay documentación relacionada con kid en documentos de Firebase. Supongo que tendremos que esperar respuestas de Google (o volver a la versión antigua de Firebase si es posible).