Mengonfigurasi klaim kustom pada pengguna
Dokumen ini menjelaskan cara mengonfigurasi klaim kustom pada pengguna dengan Identity Platform. Klaim kustom disisipkan ke dalam token pengguna selama autentikasi. Aplikasi Anda dapat menggunakan klaim ini untuk menangani skenario otorisasi yang kompleks, seperti membatasi akses pengguna ke resource berdasarkan peran mereka.
Menyiapkan klaim kustom
Untuk menjaga keamanan, tetapkan klaim kustom menggunakan Admin SDK di server Anda:
Jika Anda belum melakukannya, Instal Admin SDK.
Tetapkan klaim kustom yang ingin Anda gunakan. Pada contoh berikut, klaim kustom ditetapkan pada pengguna untuk menjelaskan bahwa ia adalah administrator:
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.
Validasi klaim kustom saat berikutnya klaim tersebut dikirim ke server Anda:
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. } }
Untuk menentukan klaim kustom yang ada untuk pengguna:
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"]);
Saat menyiapkan klaim kustom, perhatikan hal-hal berikut:
- Ukuran klaim kustom tidak boleh melebihi 1.000 byte. Mencoba meneruskan klaim yang lebih besar dari 1.000 byte akan menyebabkan error.
- Klaim kustom disisipkan ke dalam JWT pengguna saat token dikeluarkan. Klaim
baru tidak tersedia hingga token dimuat ulang. Anda dapat memuat ulang
token secara diam-diam dengan memanggil
user.getIdToken(true)
. - Untuk mempertahankan kontinuitas dan keamanan, hanya tetapkan klaim kustom di lingkungan server yang aman.
Langkah selanjutnya
- Pelajari lebih lanjut fungsi pemblokiran, yang juga dapat digunakan untuk menetapkan klaim kustom.
- Pelajari klaim kustom Identity Platform lebih lanjut di dokumentasi referensi Admin SDK.