Google is committed to advancing racial equity for Black communities. See how.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Überprüfen Sie die ID-Token

Wenn Ihre Firebase-Client-App mit einem benutzerdefinierten Back-End-Server kommuniziert, müssen Sie möglicherweise den aktuell angemeldeten Benutzer auf diesem Server identifizieren. Um dies sicher zu tun, senden Sie nach einer erfolgreichen Anmeldung das Benutzer-ID-Token mithilfe von HTTPS an Ihren Server. Überprüfen Sie dann auf dem Server die Integrität und Authentizität des ID-Tokens und uid Sie die uid von diesem ab. Sie können die auf diese Weise übertragene uid , um den aktuell angemeldeten Benutzer auf Ihrem Server sicher zu identifizieren.

Bevor Sie beginnen

Um ID-Token mit dem Firebase Admin SDK zu überprüfen, müssen Sie über ein Dienstkonto verfügen. Befolgen Sie die Anweisungen zum Einrichten des Admin SDK, um weitere Informationen zum Initialisieren des Admin SDK mit einem Dienstkonto zu erhalten.

ID-Token auf Clients abrufen

Wenn sich ein Benutzer oder ein Gerät erfolgreich anmeldet, erstellt Firebase ein entsprechendes ID-Token, das ihn eindeutig identifiziert und ihm Zugriff auf mehrere Ressourcen gewährt, z. B. Firebase-Echtzeitdatenbank und Cloud-Speicher. Sie können dieses ID-Token erneut verwenden, um den Benutzer oder das Gerät auf Ihrem benutzerdefinierten Back-End-Server zu identifizieren. Um das ID-Token vom Client abzurufen, stellen Sie sicher, dass der Benutzer angemeldet ist, und rufen Sie das ID-Token vom angemeldeten Benutzer ab:

iOS

Ziel 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
          // ...
}];
Schnell
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();
            }
        }
    });

Einheit

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

Netz

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

Sobald Sie ein ID-Token haben, können Sie dieses JWT an Ihr Backend senden und es mithilfe des Firebase Admin SDK oder einer JWT-Bibliothek eines Drittanbieters validieren, wenn Ihr Server in einer Sprache geschrieben ist, die Firebase nicht nativ unterstützt.

Überprüfen Sie ID-Token mit dem Firebase Admin SDK

Das Firebase Admin SDK verfügt über eine integrierte Methode zum Überprüfen und Dekodieren von ID-Token. Wenn das bereitgestellte ID-Token das richtige Format hat, nicht abgelaufen ist und ordnungsgemäß signiert ist, gibt die Methode das decodierte ID-Token zurück. Sie können die uid des Benutzers oder Geräts aus dem dekodierten Token uid .

Befolgen Sie die Anweisungen zum Einrichten des Admin SDK , um das Admin SDK mit einem Dienstkonto zu initialisieren. Verwenden Sie dann die Methode verifyIdToken() , um ein ID-Token zu überprüfen:

Node.js

// idToken comes from the client app
admin
  .auth()
  .verifyIdToken(idToken)
  .then((decodedToken) => {
    const uid = decodedToken.uid;
    // ...
  })
  .catch((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']

Gehen

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;

Die Überprüfung des ID-Tokens erfordert eine Projekt-ID. Das Firebase Admin SDK versucht, eine Projekt-ID über eine der folgenden Methoden abzurufen:

  • Wenn das SDK mit einer expliziten projectId App-Option initialisiert wurde, verwendet das SDK den Wert dieser Option.
  • Wenn das SDK mit Anmeldeinformationen für das project_id initialisiert wurde, verwendet das SDK das Feld project_id des JSON-Objekts des Dienstkontos.
  • Wenn die Umgebungsvariable GOOGLE_CLOUD_PROJECT festgelegt ist, verwendet das SDK seinen Wert als Projekt-ID. Diese Umgebungsvariable ist für Code verfügbar, der in einer Google-Infrastruktur wie App Engine und Compute Engine ausgeführt wird.

Überprüfen Sie ID-Token mithilfe einer JWT-Bibliothek eines Drittanbieters

Wenn Ihr Backend in einer Sprache vorliegt, die vom Firebase Admin SDK nicht unterstützt wird, können Sie die ID-Token weiterhin überprüfen. Suchen Sie zunächst eine JWT-Bibliothek eines Drittanbieters für Ihre Sprache . Überprüfen Sie anschließend den Header, die Nutzdaten und die Signatur des ID-Tokens.

Überprüfen Sie, ob der Header des ID-Tokens den folgenden Einschränkungen entspricht:

ID-Token-Header-Ansprüche
alg Algorithmus "RS256"
kid Schlüssel-ID Muss einem der öffentlichen Schlüssel entsprechen, die unter https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com

Überprüfen Sie, ob die Nutzdaten des ID-Tokens den folgenden Einschränkungen entsprechen:

ID Token Payload Claims
exp Ablaufzeit Muss in der Zukunft sein. Die Zeit wird seit der UNIX-Epoche in Sekunden gemessen.
iat Ausgestellt zum Zeitpunkt Muss in der Vergangenheit sein. Die Zeit wird seit der UNIX-Epoche in Sekunden gemessen.
aud Publikum Muss Ihre Firebase-Projekt-ID sein, die eindeutige Kennung für Ihr Firebase-Projekt, die Sie in der URL der Konsole dieses Projekts finden.
iss Aussteller Muss "https://securetoken.google.com/<projectId>" , wobei <projectId> dieselbe Projekt-ID ist, die oben für aud .
sub Gegenstand Muss eine nicht leere Zeichenfolge sein und muss die uid des Benutzers oder Geräts sein.
auth_time Authentifizierungszeit Muss in der Vergangenheit sein. Die Zeit, zu der sich der Benutzer authentifiziert hat.

Stellen Sie schließlich sicher, dass das ID-Token mit dem privaten Schlüssel signiert wurde, der dem kid Anspruch des Tokens entspricht. Rufen Sie den öffentlichen Schlüssel unter https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com und überprüfen Sie die Signatur mithilfe einer JWT-Bibliothek. Verwenden Sie den Wert von max-age im Cache-Control Header der Antwort von diesem Endpunkt, um zu wissen, wann die öffentlichen Schlüssel aktualisiert werden müssen.

Wenn alle oben genannten Überprüfungen erfolgreich sind, können Sie den Betreff ( sub ) des ID-Tokens als uid des entsprechenden Benutzers oder Geräts verwenden.