Google is committed to advancing racial equity for Black communities. See how.
Cette page a été traduite par l'API Cloud Translation.
Switch to English

Vérifier les jetons d'identité

Si votre application cliente Firebase communique avec un serveur principal personnalisé, vous devrez peut-être identifier l'utilisateur actuellement connecté sur ce serveur. Pour ce faire en toute sécurité, après une connexion réussie, envoyez le jeton d'ID de l'utilisateur à votre serveur via HTTPS. Ensuite, sur le serveur, vérifiez l'intégrité et l'authenticité du jeton d'identification et récupérez-y l' uid . Vous pouvez utiliser l' uid transmis de cette manière pour identifier en toute sécurité l'utilisateur actuellement connecté sur votre serveur.

Avant que tu commences

Pour vérifier les jetons d'identification avec le SDK Firebase Admin, vous devez disposer d'un compte de service. Suivez les instructions de configuration du SDK Admin pour plus d'informations sur la façon d'initialiser le SDK Admin avec un compte de service.

Récupérer les jetons d'identification sur les clients

Lorsqu'un utilisateur ou un appareil se connecte avec succès, Firebase crée un jeton d'identification correspondant qui les identifie de manière unique et leur accorde l'accès à plusieurs ressources, telles que Firebase Realtime Database et Cloud Storage. Vous pouvez réutiliser ce jeton d'ID pour identifier l'utilisateur ou l'appareil sur votre serveur backend personnalisé. Pour récupérer le jeton d'ID du client, assurez-vous que l'utilisateur est connecté, puis obtenez le jeton d'ID de l'utilisateur connecté:

iOS

Objectif c
 FIRUser *currentUser = [FIRAuth auth].currentUser;
[currentUser getIDTokenForcingRefresh:YES
                           completion:^(NSString *_Nullable idToken,
                                        NSError *_Nullable error) {
          if (error) {
            // Handle error
            return;
          }

          // Send token to your backend via HTTPS
          // ...
}];
 
Rapide
 let currentUser = FIRAuth.auth()?.currentUser
currentUser?.getIDTokenForcingRefresh(true) { idToken, error in
  if let error = error {
    // Handle error
    return;
  }

  // Send token to your backend via HTTPS
  // ...
}
 

Android

 FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
mUser.getIdToken(true)
    .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
        public void onComplete(@NonNull Task<GetTokenResult> task) {
            if (task.isSuccessful()) {
                String idToken = task.getResult().getToken();
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException();
            }
        }
    });
 

Unité

 Firebase.Auth.FirebaseUser user = auth.CurrentUser;
user.TokenAsync(true).ContinueWith(task => {
  if (task.IsCanceled) {
    Debug.LogError("TokenAsync was canceled.");
   return;
  }

  if (task.IsFaulted) {
    Debug.LogError("TokenAsync encountered an error: " + task.Exception);
    return;
  }

  string idToken = task.Result;

  // Send token to your backend via HTTPS
  // ...
});
 

C ++

 firebase::auth::User* user = auth->current_user();
if (user != nullptr) {
  firebase::Future<std::string> idToken = user->GetToken(true);

  // Send token to your backend via HTTPS
  // ...
}
 

la toile

 firebase.auth().currentUser.getIdToken(/* forceRefresh */ true).then(function(idToken) {
  // Send token to your backend via HTTPS
  // ...
}).catch(function(error) {
  // Handle error
});
 

Une fois que vous avez un jeton d'identification, vous pouvez envoyer ce JWT à votre backend et le valider à l'aide du SDK Firebase Admin, ou en utilisant une bibliothèque JWT tierce si votre serveur est écrit dans une langue que Firebase ne prend pas en charge de manière native.

Vérifier les jetons d'identification à l'aide du SDK Firebase Admin

Le SDK Firebase Admin possède une méthode intégrée pour vérifier et décoder les jetons d'identification. Si le jeton d'ID fourni a le format correct, n'est pas expiré et est correctement signé, la méthode renvoie le jeton d'ID décodé. Vous pouvez récupérer l' uid de l'utilisateur ou de l'appareil à partir du jeton décodé.

Suivez les instructions de configuration du SDK Admin pour initialiser le SDK Admin avec un compte de service. Ensuite, utilisez la méthode verifyIdToken() pour vérifier un jeton d'ID:

Node.js

 // idToken comes from the client app
admin.auth().verifyIdToken(idToken)
  .then(function(decodedToken) {
    let uid = decodedToken.uid;
    // ...
  }).catch(function(error) {
    // Handle error
  });
 

Java

 // idToken comes from the client app (shown above)
FirebaseToken decodedToken = FirebaseAuth.getInstance().verifyIdToken(idToken);
String uid = decodedToken.getUid();
 

Python

 # id_token comes from the client app (shown above)

decoded_token = auth.verify_id_token(id_token)
uid = decoded_token['uid']
 

Aller

 client, err := app.Auth(ctx)
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

token, err := client.VerifyIDToken(ctx, idToken)
if err != nil {
	log.Fatalf("error verifying ID token: %v\n", err)
}

log.Printf("Verified ID token: %v\n", token) 

C #

 FirebaseToken decodedToken = await FirebaseAuth.DefaultInstance
    .VerifyIdTokenAsync(idToken);
string uid = decodedToken.Uid;
 

La vérification du jeton d'identification nécessite un ID de projet. Le SDK Firebase Admin tente d'obtenir un ID de projet via l'une des méthodes suivantes:

  • Si le SDK a été initialisé avec une option d'application projectId explicite, le SDK utilise la valeur de cette option.
  • Si le SDK a été initialisé avec les informations d'identification du compte de service, le SDK utilise le champ project_id de l'objet JSON du compte de service.
  • Si la variable d'environnement GOOGLE_CLOUD_PROJECT est définie, le SDK utilise sa valeur comme ID de projet. Cette variable d'environnement est disponible pour le code exécuté sur l'infrastructure Google telle que Google App Engine et Google Compute Engine.

Vérifier les jetons d'identification à l'aide d'une bibliothèque JWT tierce

Si votre backend est dans une langue non prise en charge par le SDK Firebase Admin, vous pouvez toujours vérifier les jetons d'ID. Tout d'abord, recherchez une bibliothèque JWT tierce pour votre langue . Ensuite, vérifiez l'en-tête, la charge utile et la signature du jeton ID.

Vérifiez que l'en-tête du jeton d'identification est conforme aux contraintes suivantes:

Revendications d'en-tête de jeton d'identification
alg Algorithme "RS256"
kid ID de clé Doit correspondre à l'une des clés publiques répertoriées sur https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com

Vérifiez que la charge utile du jeton ID est conforme aux contraintes suivantes:

Réclamations de charge utile de jeton d'identification
exp Date d'expiration Ça doit être dans le futur. Le temps est mesuré en secondes depuis l'époque UNIX.
iat Délivré à l'heure Ça doit être dans le passé. Le temps est mesuré en secondes depuis l'époque UNIX.
aud Public Doit être l'ID de votre projet Firebase, l'identifiant unique de votre projet Firebase, qui se trouve dans l'URL de la console de ce projet.
iss Émetteur Doit être "https://securetoken.google.com/<projectId>" , où <projectId> est le même ID de projet utilisé pour aud ci-dessus.
sub Matière Doit être une chaîne non vide et doit être l' uid de l'utilisateur ou du périphérique.
auth_time Temps d'authentification Ça doit être dans le passé. L'heure à laquelle l'utilisateur s'est authentifié.

Enfin, assurez-vous que le jeton d'identification a été signé par la clé privée correspondant à la revendication d' kid du jeton. Récupérez la clé publique sur https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com et utilisez une bibliothèque JWT pour vérifier la signature. Utilisez la valeur de max-age dans l'en Cache-Control tête Cache-Control de la réponse de ce point de terminaison pour savoir quand actualiser les clés publiques.

Si toutes les vérifications ci-dessus aboutissent, vous pouvez utiliser le sujet ( sub ) du jeton d'identification comme uid de l'utilisateur ou de l'appareil correspondant.