Benutzerdefinierte Tokens erstellen
In diesem Dokument wird gezeigt, wie Sie mit Identity Platform benutzerdefinierte JSON-Web-Tokens (JWTs) erstellen.
Mit benutzerdefinierten Tokens haben Sie die vollständige Kontrolle über den Authentifizierungsprozess. Sie generieren diese Tokens auf Ihrem Server, übergeben sie an ein Clientgerät und rufen dann signInWithCustomToken()
auf, um sich anzumelden.
Sie können benutzerdefinierte Tokens mit dem Identity Platform Admin SDK erstellen oder die JWT-Bibliothek eines Drittanbieters verwenden.
Hinweis
Installieren Sie das Admin SDK. Wenn Sie die automatische Dienstkontoerkennung oder eine explizit angegebene Dienstkonto-ID verwenden, muss das verwendete Dienstkonto mindestens die Rolle „Dienstkonto-Token-Ersteller“ (
roles/iam.serviceAccountTokenCreator
) haben.Erstellen Sie einen Serverendpunkt, der Anmeldedaten von Nutzern akzeptiert.
Benutzerdefinierte Tokens mit dem Admin SDK erstellen
Das Admin SDK verfügt über eine integrierte Methode zum Erstellen benutzerdefinierter Tokens. Sie müssen mindestens einen uid
angeben. Dies kann ein beliebiger String sein, der den Nutzer oder das Gerät eindeutig identifiziert. Diese Tokens laufen nach einer Stunde ab.
Das folgende Beispiel zeigt, wie ein benutzerdefiniertes Token erstellt wird:
Node.js
const uid = 'some-uid'; getAuth() .createCustomToken(uid) .then((customToken) => { // Send token back to client }) .catch((error) => { console.log('Error creating custom token:', error); });
Java
String uid = "some-uid"; String customToken = FirebaseAuth.getInstance().createCustomToken(uid); // Send token back to client
Python
uid = 'some-uid' custom_token = auth.create_custom_token(uid)
Go
client, err := app.Auth(context.Background()) if err != nil { log.Fatalf("error getting Auth client: %v\n", err) } token, err := client.CustomToken(ctx, "some-uid") if err != nil { log.Fatalf("error minting custom token: %v\n", err) } log.Printf("Got custom token: %v\n", token)
C#
var uid = "some-uid"; string customToken = await FirebaseAuth.DefaultInstance.CreateCustomTokenAsync(uid); // Send token back to client
Nachdem Sie ein benutzerdefiniertes Token erstellt haben, kann Ihre Anwendung damit einen Nutzer anmelden.
Optional können Sie weitere Anforderungen für das benutzerdefinierte Token hinzufügen. Diese werden an das ID-Token des Nutzers als Anforderungen auf oberster Ebene weitergegeben.
Das folgende Beispiel zeigt, wie Sie eine premiumAccount
-Anforderung hinzufügen:
Node.js
const userId = 'some-uid'; const additionalClaims = { premiumAccount: true, }; getAuth() .createCustomToken(userId, additionalClaims) .then((customToken) => { // Send token back to client }) .catch((error) => { console.log('Error creating custom token:', error); });
Java
String uid = "some-uid"; Map<String, Object> additionalClaims = new HashMap<String, Object>(); additionalClaims.put("premiumAccount", true); String customToken = FirebaseAuth.getInstance() .createCustomToken(uid, additionalClaims); // Send token back to client
Python
uid = 'some-uid' additional_claims = { 'premiumAccount': True } custom_token = auth.create_custom_token(uid, additional_claims)
Go
client, err := app.Auth(context.Background()) if err != nil { log.Fatalf("error getting Auth client: %v\n", err) } claims := map[string]interface{}{ "premiumAccount": true, } token, err := client.CustomTokenWithClaims(ctx, "some-uid", claims) if err != nil { log.Fatalf("error minting custom token: %v\n", err) } log.Printf("Got custom token: %v\n", token)
C#
var uid = "some-uid"; var additionalClaims = new Dictionary<string, object>() { { "premiumAccount", true }, }; string customToken = await FirebaseAuth.DefaultInstance .CreateCustomTokenAsync(uid, additionalClaims); // Send token back to client
Identity Platform entspricht der JWT-Spezifikation von OpenID Connect. Dies bedeutet, dass die folgenden Anforderungen reserviert sind und nicht angegeben werden können:
acr
amr
at_hash
aud
auth_time
azp
cnf
c_hash
exp
firebase
iat
iss
jti
nbf
nonce
sub
Benutzerdefinierte Tokens mit der JWT-Bibliothek eines Drittanbieters erstellen
Wenn Ihr Back-End in einer Sprache geschrieben ist, die vom Admin SDK nicht unterstützt wird, können Sie trotzdem benutzerdefinierte Tokens manuell erstellen. Suchen Sie zuerst nach einer JWT-Bibliothek eines Drittanbieters für Ihre Sprache. Verwenden Sie dann diese Bibliothek, um ein JWT zu reduzieren, das die folgenden Anforderungen enthält:
alg |
Algorithmus | "RS256" |
iss |
Aussteller | Die E-Mail-Adresse des Dienstkontos Ihres Projekts. |
sub |
Betreff | Die E-Mail-Adresse des Dienstkontos Ihres Projekts. |
aud |
Zielgruppe | "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit" |
iat |
Ausstellungszeit | Die aktuelle Zeit in Sekunden seit der UNIX-Epoche. |
exp |
Ablaufzeit |
Die Zeit in Sekunden seit der UNIX-Epoche, zu der das Token abläuft. Dies kann maximal 3.600 Sekunden später als iat sein.
Beachten Sie, dass damit nur der Zeitpunkt gesteuert wird, zu dem das benutzerdefinierte Token selbst abläuft. Wenn Sie einen Nutzer mit signInWithCustomToken() angemeldet haben, bleibt er so lange angemeldet, bis er sich wieder abmeldet oder seine Sitzung ungültig wird.
|
uid |
Die eindeutige Kennung des angemeldeten Nutzers. Muss ein String mit 1 bis 36 Zeichen sein. | |
claims (optional) |
Zusätzliche benutzerdefinierte Anforderungen, die hinzugefügt werden sollen. |
Die folgenden Beispiele veranschaulichen, wie Sie benutzerdefinierte Tokens in Sprachen erstellen, die vom Admin SDK nicht unterstützt wird:
PHP
Mit php-jwt
:
// Requires: composer require firebase/php-jwt
use Firebase\JWT\JWT;
// Get your service account's email address and private key from the JSON key file
$service_account_email = "abc-123@a-b-c-123.iam.gserviceaccount.com";
$private_key = "-----BEGIN PRIVATE KEY-----...";
function create_custom_token($uid, $is_premium_account) {
global $service_account_email, $private_key;
$now_seconds = time();
$payload = array(
"iss" => $service_account_email,
"sub" => $service_account_email,
"aud" => "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
"iat" => $now_seconds,
"exp" => $now_seconds+(60*60), // Maximum expiration time is one hour
"uid" => $uid,
"claims" => array(
"premium_account" => $is_premium_account
)
);
return JWT::encode($payload, $private_key, "RS256");
}
Ruby
Mit ruby-jwt
:
require "jwt"
# Get your service account's email address and private key from the JSON key file
$service_account_email = "service-account@my-project-abc123.iam.gserviceaccount.com"
$private_key = OpenSSL::PKey::RSA.new "-----BEGIN PRIVATE KEY-----\n..."
def create_custom_token(uid, is_premium_account)
now_seconds = Time.now.to_i
payload = {:iss => $service_account_email,
:sub => $service_account_email,
:aud => "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
:iat => now_seconds,
:exp => now_seconds+(60*60), # Maximum expiration time is one hour
:uid => uid,
:claims => {:premium_account => is_premium_account}}
JWT.encode payload, $private_key, "RS256"
end
Nachdem Sie ein benutzerdefiniertes Token erstellt haben, kann Ihre Anwendung damit einen Nutzer anmelden.
Nächste Schritte
- Anmelden mit benutzerdefinierten Tokens.
- Benutzerdefinierte Anforderungen für Nutzer konfigurieren
- Verwenden Sie die REST API, um Identity Platform in andere Bereiche Ihres benutzerdefinierten Authentifizierungssystems einzubinden.