Configurare attestazioni personalizzate per gli utenti
Questo documento spiega come configurare attestazioni personalizzate per gli utenti con Identity Platform. Le attestazioni personalizzate vengono inserite nei token utente durante l'autenticazione. La tua app può utilizzare queste rivendicazioni per gestire scenari di autorizzazione complessi, ad esempio limitare l'accesso di un utente a una risorsa in base al suo ruolo.
Configurare attestazioni personalizzate
Per preservare la sicurezza, imposta rivendicazioni personalizzate utilizzando l'SDK Admin sul tuo server:
Se non lo hai ancora fatto, installa l'SDK Admin.
Imposta l'attestazione personalizzata che vuoi utilizzare. Nell'esempio seguente, viene impostata un'attestazione personalizzata per l'utente per indicare che è un amministratore:
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.
Convalida l'attestazione personalizzata la volta successiva che viene inviata al tuo 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. } }
Per determinare quali attestazioni personalizzate sono presenti per un utente:
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"]);
Quando configuri le rivendicazioni personalizzate, tieni presente quanto segue:
- Le rivendicazioni personalizzate non possono superare i 1000 byte di dimensione. Il tentativo di trasmettere attestazioni più grandi di 1000 byte genera un errore.
- Le attestazioni personalizzate vengono inserite nel JWT utente quando viene emesso il token. Le nuove
rivendicazioni non sono disponibili finché il token non viene aggiornato. Puoi aggiornare
un token in modo invisibile chiamando
user.getIdToken(true). - Per mantenere la continuità e la sicurezza, imposta le rivendicazioni personalizzate solo in un ambiente server sicuro.
Passaggi successivi
- Scopri di più sulle funzioni di blocco, che possono essere utilizzate anche per impostare rivendicazioni personalizzate.
- Scopri di più sulle rivendicazioni personalizzate di Identity Platform nella documentazione di riferimento dell'SDK Admin.