Ikuti semua informasi yang diumumkan di Firebase Summit, dan pelajari bagaimana Firebase dapat membantu Anda mempercepat pengembangan aplikasi dan menjalankan aplikasi dengan percaya diri. Pelajari Lebih Lanjut

Aturan Keamanan dan Otentikasi Firebase

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Aturan Keamanan Firebase menyediakan kontrol akses dan validasi data dalam format yang mendukung berbagai tingkat kerumitan. Untuk membangun sistem akses berbasis pengguna dan peran yang menjaga keamanan data pengguna Anda, gunakan Firebase Authentication dengan Aturan Keamanan Firebase.

Identifikasi pengguna

Autentikasi mengidentifikasi pengguna yang meminta akses ke data Anda dan memberikan informasi tersebut sebagai variabel yang dapat Anda manfaatkan dalam aturan Anda. Variabel auth berisi informasi berikut:

  • uid : ID pengguna unik, ditetapkan untuk pengguna yang meminta.
  • token : Peta nilai yang dikumpulkan oleh Otentikasi.

Variabel auth.token berisi nilai-nilai berikut:

Bidang Keterangan
email Alamat email yang terkait dengan akun, jika ada.
email_verified true jika pengguna telah memverifikasi bahwa mereka memiliki akses ke alamat email . Beberapa penyedia secara otomatis memverifikasi alamat email yang mereka miliki.
phone_number Nomor telepon yang terkait dengan akun, jika ada.
name Nama tampilan pengguna, jika disetel.
sub UID Firebase pengguna. Ini unik dalam sebuah proyek.
firebase.identities Kamus semua identitas yang terkait dengan akun pengguna ini. Kunci kamus dapat berupa salah satu dari berikut ini: email , phone , google.com , facebook.com , github.com , twitter.com . Nilai kamus adalah larik pengidentifikasi unik untuk setiap penyedia identitas yang terkait dengan akun. Misalnya, auth.token.firebase.identities["google.com"][0] berisi ID pengguna Google pertama yang dikaitkan dengan akun.
firebase.sign_in_provider Penyedia masuk yang digunakan untuk mendapatkan token ini. Dapat berupa salah satu dari string berikut: custom , password , phone , anonymous , google.com , facebook.com , github.com , twitter.com .
firebase.tenant tenantId yang terkait dengan akun, jika ada. misalnya tenant2-m6tyz

Jika Anda ingin menambahkan atribut autentikasi yang disesuaikan, variabel auth.token juga berisi klaim khusus yang Anda tentukan.

Saat pengguna yang meminta akses tidak masuk, variabel auth adalah null . Anda dapat memanfaatkan ini dalam aturan Anda jika, misalnya, Anda ingin membatasi akses baca ke pengguna yang diautentikasi — auth != null . Namun, kami biasanya menyarankan untuk membatasi akses tulis lebih jauh.

Untuk informasi selengkapnya tentang variabel auth , lihat dokumentasi referensi untuk Cloud Firestore , Realtime Database , dan Cloud Storage .

Manfaatkan informasi pengguna dalam aturan

Dalam praktiknya, menggunakan informasi yang diautentikasi dalam aturan Anda membuat aturan Anda lebih kuat dan fleksibel. Anda dapat mengontrol akses ke data berdasarkan identitas pengguna.

Dalam aturan Anda, tentukan bagaimana informasi dalam variabel auth — informasi pengguna pemohon — cocok dengan informasi pengguna yang terkait dengan data yang diminta.

Misalnya, aplikasi Anda mungkin ingin memastikan pengguna hanya dapat membaca dan menulis data mereka sendiri. Dalam skenario ini, Anda menginginkan kecocokan antara variabel auth.uid dan ID pengguna pada data yang diminta:

Cloud Firestore

service cloud.firestore {
  match /databases/{database}/documents {
    // Make sure the uid of the requesting user matches name of the user
    // document. The wildcard expression {userId} makes the userId variable
    // available in rules.
    match /users/{userId} {
      allow read, write: if request.auth != null && request.auth.uid == userId;
    }
  }
}

Basis Data Waktu Nyata

{
  "rules": {
    "users": {
      "$userId": {
        // grants write access to the owner of this user account
        // whose uid must exactly match the key ($userId)
        ".write": "$userId === auth.uid"
      }
    }
  }
}

Penyimpanan awan

service firebase.storage {
  // Only a user can upload their file, but anyone can view it
  match /users/{userId}/{fileName} {
    allow read;
    allow write: if request.auth != null && request.auth.uid == userId;
  }
}

Tentukan informasi pengguna khusus

Anda dapat lebih memanfaatkan variabel auth untuk menentukan bidang khusus yang ditetapkan untuk pengguna aplikasi Anda.

Misalnya, anggap Anda ingin membuat peran "admin" yang memungkinkan akses tulis di jalur tertentu. Anda akan menetapkan atribut itu kepada pengguna, lalu memanfaatkannya dalam aturan yang memberikan akses di jalur.

Di Cloud Firestore, Anda dapat menambahkan kolom kustom ke dokumen pengguna dan mengambil nilai kolom tersebut dengan bacaan yang disematkan di aturan Anda. Jadi, aturan berbasis admin Anda akan terlihat seperti contoh berikut:

Cloud Firestore

service cloud.firestore {
  match /databases/{database}/documents/some_collection: {
    // Remember that, in Cloud Firestore, reads embedded in your rules are billed operations
    write: if request.auth != null && get(/databases/(database)/documents/users/$(request.auth.uid)).data.admin) == true;
    read: if request.auth != null;
  }
}

Anda dapat mengakses klaim khusus di Aturan setelah membuat klaim khusus di Autentikasi. Anda kemudian dapat mereferensikan klaim khusus tersebut menggunakan variabel auth.token .

Cloud Firestore

service cloud.firestore {
  match /databases/{database}/documents {
    // For attribute-based access control, check for an admin claim
    allow write: if request.auth.token.admin == true;
    allow read: true;

    // Alterntatively, for role-based access, assign specific roles to users
    match /some_collection/{document} {
     allow read: if request.auth.token.reader == "true";
     allow write: if request.auth.token.writer == "true";
   }
  }
}

Basis Data Waktu Nyata

{
  "rules": {
    "some_path/$sub_path": {
      // Create a custom claim for the admin role
      ".write": "auth.uid !== null && auth.token.writer === true"
      ".read": "auth.uid !== null"
      }
    }
  }

Penyimpanan awan

service firebase.storage {
  // Create a custom claim for the admin role
  match /files/{fileName} {
    allow read: if request.auth.uid != null;
    allow write: if request.auth.token.admin == true;
  }
}

Untuk melihat lebih banyak contoh Aturan dasar yang memanfaatkan Otentikasi, lihat Aturan Keamanan Dasar .