ID-Token überprüfen

Wenn Ihre Firebase-Client-App mit einem benutzerdefinierten Back-End-Server kommuniziert, müssen Sie möglicherweise den derzeit angemeldeten Benutzer auf diesem Server identifizieren. Um dies sicher zu tun, senden Sie nach einer erfolgreichen Anmeldung das ID-Token des Benutzers über HTTPS an Ihren Server. Dann wird auf dem Server, um die Integrität und Authentizität der ID - Token und rufen Sie die uid von ihm. Sie können die Verwendung uid auf diese Weise übertragen werden, um sicher die aktuell angemeldeten Nutzers auf dem Server zu identifizieren.

Bevor Sie beginnen

Um ID-Token mit dem Firebase Admin SDK zu überprüfen, müssen Sie über ein Dienstkonto verfügen. Folgen Sie die Admin SDK Installationsanweisungen für weitere Informationen, wie das Admin SDK mit einem Dienstkonto zu initialisieren.

Abrufen von ID-Token auf Clients

Wenn sich ein Nutzer oder ein Gerät erfolgreich anmeldet, erstellt Firebase ein entsprechendes ID-Token, das ihn eindeutig identifiziert und ihm Zugriff auf verschiedene Ressourcen wie Firebase Realtime Database und Cloud Storage gewährt. Sie können dieses ID-Token wiederverwenden, 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 dann 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 über ein ID-Token verfügen, können Sie dieses JWT an Ihr Back-End senden und mit dem Firebase Admin SDK oder mit einer JWT-Bibliothek eines Drittanbieters validieren, wenn Ihr Server in einer Sprache geschrieben ist, die Firebase nicht nativ unterstützt.

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

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

Folgen Sie den Admin SDK Installationsanweisungen des Admin SDK mit einem Dienstkonto zu initialisieren. Verwenden Sie dann die verifyIdToken() Methode , um eine ID zu überprüfen Token:

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;

Für die Überprüfung des ID-Tokens ist eine Projekt-ID erforderlich. Das Firebase Admin SDK versucht, eine Projekt-ID über eine der folgenden Methoden abzurufen:

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

ID-Token mit einer JWT-Bibliothek eines Drittanbieters überprüfen

Wenn Ihr Back-End in einer Sprache vorliegt, die vom Firebase Admin SDK nicht unterstützt wird, können Sie ID-Token dennoch überprüfen. Zuerst findet einen Drittanbieter JWT Bibliothek für Ihre Sprache . Überprüfen Sie dann den Header, die Nutzlast 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 aufgeführt einem der öffentlichen Schlüssel entsprechen https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com

Stellen Sie sicher, dass die Nutzlast des ID-Tokens den folgenden Einschränkungen entspricht:

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

Schließlich, stellen Sie sicher , dass die ID - Token von dem privaten Schlüssel signiert wurden entsprechend den Token kid Anspruch. Besorgen Sie sich die öffentlichen Schlüssel von https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com und verwenden eine JWT Bibliothek , um die Signatur zu überprüfen. Verwenden Sie den Wert von max-age in den Cache-Control - Header der Antwort von diesem Endpunkt zu wissen , wann die öffentlichen Schlüssel zu aktualisieren.

Wenn alle oben genannten Prüfungen erfolgreich sind, können Sie das Motiv (verwenden sub ) des als Token - ID uid des entsprechenden Benutzer oder Gerät.