Benutzerdefinierte Anforderungen für Nutzer konfigurieren
In diesem Dokument wird erläutert, wie benutzerdefinierte Anforderungen für Nutzer mit Identity Platform konfiguriert werden. Benutzerdefinierte Anforderungen werden während der Authentifizierung in Nutzer-Tokens eingefügt. Ihre App kann diese Anforderungen verwenden, um komplexe Autorisierungsszenarien zu verarbeiten, z. B. um den Zugriff eines Nutzers auf eine Ressource entsprechend seiner Rolle einzuschränken.
Benutzerdefinierte Ansprüche einrichten
Um die Sicherheit zu wahren, kannst du mit dem Admin SDK benutzerdefinierte Ansprüche auf deinem Server:
Installieren Sie das Admin SDK, falls noch nicht geschehen.
Wählen Sie die benutzerdefinierte Anforderung aus, die Sie verwenden möchten. Im folgenden Beispiel wird eine benutzerdefinierte Anforderung auf den Nutzer festgelegt, um zu beschreiben, dass er ein Administrator ist:
Node.js
// Set admin privilege on the user corresponding to uid. getAuth() .setCustomUserClaims(uid, { admin: true }) .then(() => { // The new custom claims will propagate to the user's ID token the // next time a new one is issued. });
Java
// Set admin privilege on the user corresponding to uid. Map<String, Object> claims = new HashMap<>(); claims.put("admin", true); FirebaseAuth.getInstance().setCustomUserClaims(uid, claims); // The new custom claims will propagate to the user's ID token the // next time a new one is issued.
Python
# Set admin privilege on the user corresponding to uid. auth.set_custom_user_claims(uid, {'admin': True}) # The new custom claims will propagate to the user's ID token the # next time a new one is issued.
Go
// Get an auth client from the firebase.App client, err := app.Auth(ctx) if err != nil { log.Fatalf("error getting Auth client: %v\n", err) } // Set admin privilege on the user corresponding to uid. claims := map[string]interface{}{"admin": true} err = client.SetCustomUserClaims(ctx, uid, claims) if err != nil { log.Fatalf("error setting custom claims %v\n", err) } // The new custom claims will propagate to the user's ID token the // next time a new one is issued.
C#
// Set admin privileges on the user corresponding to uid. var claims = new Dictionary<string, object>() { { "admin", true }, }; await FirebaseAuth.DefaultInstance.SetCustomUserClaimsAsync(uid, claims); // The new custom claims will propagate to the user's ID token the // next time a new one is issued.
Validieren Sie den benutzerdefinierten Anforderung bei der nächsten Übermittlung an Ihren Server:
Node.js
// Verify the ID token first. getAuth() .verifyIdToken(idToken) .then((claims) => { if (claims.admin === true) { // Allow access to requested admin resource. } });
Java
// Verify the ID token first. FirebaseToken decoded = FirebaseAuth.getInstance().verifyIdToken(idToken); if (Boolean.TRUE.equals(decoded.getClaims().get("admin"))) { // Allow access to requested admin resource. }
Python
# Verify the ID token first. claims = auth.verify_id_token(id_token) if claims['admin'] is True: # Allow access to requested admin resource. pass
Go
// Verify the ID token first. token, err := client.VerifyIDToken(ctx, idToken) if err != nil { log.Fatal(err) } claims := token.Claims if admin, ok := claims["admin"]; ok { if admin.(bool) { //Allow access to requested admin resource. } }
C#
// Verify the ID token first. FirebaseToken decoded = await FirebaseAuth.DefaultInstance.VerifyIdTokenAsync(idToken); object isAdmin; if (decoded.Claims.TryGetValue("admin", out isAdmin)) { if ((bool)isAdmin) { // Allow access to requested admin resource. } }
So bestimmen Sie, welche benutzerdefinierten Anforderungen für einen Nutzer vorhanden sind:
Node.js
// Lookup the user associated with the specified uid. getAuth() .getUser(uid) .then((userRecord) => { // The claims can be accessed on the user record. console.log(userRecord.customClaims['admin']); });
Java
// Lookup the user associated with the specified uid. UserRecord user = FirebaseAuth.getInstance().getUser(uid); System.out.println(user.getCustomClaims().get("admin"));
Python
# Lookup the user associated with the specified uid. user = auth.get_user(uid) # The claims can be accessed on the user record. print(user.custom_claims.get('admin'))
Go
// Lookup the user associated with the specified uid. user, err := client.GetUser(ctx, uid) if err != nil { log.Fatal(err) } // The claims can be accessed on the user record. if admin, ok := user.CustomClaims["admin"]; ok { if admin.(bool) { log.Println(admin) } }
C#
// Lookup the user associated with the specified uid. UserRecord user = await FirebaseAuth.DefaultInstance.GetUserAsync(uid); Console.WriteLine(user.CustomClaims["admin"]);
Beim Einrichten benutzerdefinierter Ansprüche solltest du Folgendes beachten:
- Benutzerdefinierte Anforderungen dürfen nicht größer als 1000 Byte sein. Versuch, Ansprüche zu übergeben größer als 1.000 Byte führt zu einem Fehler.
- Benutzerdefinierte Anforderungen werden in das JWT des Nutzers eingefügt, wenn das Token ausgegeben wird. Neue Anforderungen sind erst verfügbar, wenn das Token aktualisiert wurde. Sie können ein Token stumm aktualisieren, indem Sie
user.getIdToken(true)
aufrufen. - Legen Sie zur Gewährleistung der Kontinuität und Sicherheit benutzerdefinierte Anforderungen nur in einer sicheren Serverumgebung fest.
Nächste Schritte
- Hier findest du weitere Informationen zu Blockierfunktionen, mit denen du auch benutzerdefinierte Ansprüche festlegen kannst.
- Weitere Informationen zu benutzerdefinierten Anforderungen von Identity Platform finden Sie in der Referenzdokumentation für das Admin SDK.