web-dev-qa-db-fra.com

L'authentification Android de Firebase a échoué: expired_token (le jeton d'authentification est expiré)

Je rencontre un problème avec Android Firebase Auth en utilisant com.google.gms:google-services:3.0.0 et com.google.firebase:firebase-auth:9.0.1.

1 heure après l'authentification avec Firebase (Google ou Facebook), l'erreur suivante apparaît:

W/PersistentConnection: pc_0 - Authentication failed: expired_token (Auth token is expired)

Pourquoi le jeton Firebase expire-t-il après 1 heure et comment prolonger cette période d'expiration?

METTRE À JOUR

Je rencontre toujours ce problème, le jeton Firebase expire au bout d'une heure. Maintenant, je reçois le message suivant: W/PersistentConnection: pc_0 - Authentication failed: invalid_token (Invalid claim 'kid' in auth header.)

J'apprécie toute aide.

12
kandroid

Si nous utilisons des fournisseurs d'authentification par défaut tels que (Google, Facebook, Email ...), la mise à jour de la "clé SHA-1" de votre application dans la console Firebase résoudrait le problème de l'expiration du jeton.

Dans cette discussion un développeur de Google a partagé un guide pour résoudre ce problème.

Guide: https://drive.google.com/file/d/0B94LePkXiqa6SXVFd3N1NzJHX1E/view

3
Karthi R

Essayez d'implémenter FirebaseInstanceIdService pour obtenir le jeton d'actualisation.

Accéder au jeton d'enregistrement:

Vous pouvez accéder à la valeur du jeton en développant FirebaseInstanceIdService . Assurez-vous que vous avez ajouté le service à votre manifest , puis appelez getToken dans le contexte de onTokenRefresh et enregistrez la valeur comme indiqué:

    @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);
}

OnTokenRefreshcallback se déclenche chaque fois qu'un nouveau jeton est généré, donc appeler getToken dans son contexte garantit que vous accédez à un fichier jeton d'inscription actuel et disponible. FirebaseInstanceID.getToken() renvoie la valeur null si le jeton n'a pas encore été généré.

Code:

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.
    }
}

J'espère que ça vous aide.

0
pRaNaY

La nouvelle durée de vie maximale des jetons Firebase est d'1 heure - je l'ai lu dans la documentation un peu plus tôt aujourd'hui.

En ce qui concerne La revendication 'kid' non valide dans l'en-tête d'authentification. , j’obtiens exactement 2 résultats de recherche sur Google pour cela (: Aucune documentation relative à kid dans les documents Firebase. Je suppose que nous devrons attendre les réponses de Google (ou revenir à l’ancienne version de Firebase si possible).

0
Jigar Mehta