Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Reguły bezpieczeństwa i uwierzytelnianie Firebase

Reguły zabezpieczeń Firebase zapewniają kontrolę dostępu i weryfikację danych w formacie obsługującym wiele poziomów złożoności. Aby zbudować w oparciu o użytkownika i systemów dostępowych opartych na rolach, które bezpiecznego przechowywania danych użytkowników, należy użyć uwierzytelniania Firebase z Firebase zasad bezpieczeństwa.

Zidentyfikuj użytkowników

Uwierzytelnianie identyfikuje użytkowników żądających dostępu do Twoich danych i udostępnia te informacje jako zmienną, którą możesz wykorzystać w swoich regułach. auth zmienna zawiera następujące informacje:

  • uid : Unikalny identyfikator użytkownika przypisany do żądającego użytkownika.
  • token : Mapa wartości zebranych przez uwierzytelniania.

auth.token zmienna zawiera następujące wartości:

Pole Opis
email Adres e-mail powiązany z kontem, jeśli jest obecny.
email_verified true jeśli użytkownik zweryfikował mają dostęp do email adres. Niektórzy dostawcy automatycznie weryfikują swoje adresy e-mail.
phone_number Numer telefonu powiązany z kontem, jeśli jest obecny.
name Wyświetlana nazwa użytkownika, jeśli jest ustawiona.
sub UID Firebase użytkownika. Jest to wyjątkowe w ramach projektu.
firebase.identities Słownik wszystkich tożsamości powiązanych z kontem tego użytkownika. Kluczami słownika może być dowolny z następujących: email , phone , google.com , facebook.com , github.com , twitter.com . Wartości słownika to tablice unikalnych identyfikatorów dla każdego dostawcy tożsamości skojarzonego z kontem. Na przykład, auth.token.firebase.identities["google.com"][0] zawiera pierwszy identyfikator pomocną związanego z rachunku.
firebase.sign_in_provider Dostawca logowania używany do uzyskania tego tokenu. Może być jednym z następujących ciągów: custom , password , phone , anonymous , google.com , facebook.com , github.com , twitter.com .

Jeśli chcesz dodać niestandardowe atrybuty uwierzytelnieniu, auth.token zmienna zawiera również żadnych własnych roszczeń określone przez użytkownika.

Gdy dostęp żądania użytkownik nie zalogujesz, auth zmienna jest null . Można wykorzystać to w swoich zasadach, jeśli na przykład chcesz ograniczyć dostęp do odczytu uwierzytelnionych użytkowników - auth != null . Jednak ogólnie zalecamy dalsze ograniczanie dostępu do zapisu.

Aby uzyskać więcej informacji na temat auth zmiennej, zobacz dokumentację referencyjną chmurze FireStore , Realtime Database i Cloud Storage .

Wykorzystaj informacje o użytkowniku w regułach

W praktyce użycie w regułach informacji uwierzytelnionych sprawia, że ​​reguły są bardziej wydajne i elastyczne. Możesz kontrolować dostęp do danych na podstawie tożsamości użytkownika.

W swoich zasad, określić, jak informacje zawarte w auth zmiennej - informacje użytkownika żądającego za - dopasowuje informacje użytkownika związane z żądanych danych.

Na przykład Twoja aplikacja może chcieć, aby użytkownicy mogli tylko odczytywać i zapisywać własne dane. W tym scenariuszu, co chcesz mecz pomiędzy auth.uid zmiennej i identyfikatora użytkownika na żądane dane:

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;
    }
  }
}

Baza danych czasu rzeczywistego

{
  "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"
      }
    }
  }
}

Magazyn w chmurze

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;
  }
}

Zdefiniuj niestandardowe informacje o użytkowniku

Można dodatkowo wykorzystać auth zmiennej zdefiniować niestandardowe pola przypisane do użytkowników swojej aplikacji.

Załóżmy na przykład, że chcesz utworzyć rolę „admin”, która umożliwia dostęp do zapisu w określonych ścieżkach. Przypisałbyś ten atrybut użytkownikom, a następnie wykorzystał go w regułach przyznających dostęp do ścieżek.

W Cloud Firestore możesz dodać niestandardowe pole do dokumentów użytkowników i pobrać wartość tego pola z osadzonym odczytem w swoich regułach. Tak więc Twoja reguła administracyjna wyglądałaby jak w następującym przykładzie:

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;
  }
}

Do Regulaminu w czasie rzeczywistym bazy danych i Cloud Storage, tworzenie własnych roszczeń uwierzytelniania. Następnie można odwołać te niestandardowe roszczeń za pomocą auth.token zmienną.

Baza danych czasu rzeczywistego

{
  "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"
      }
    }
  }

Magazyn w chmurze

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;
  }
}

Aby zobaczyć więcej przykładów podstawowych zasad wykorzystujących uwierzytelniania, zobacz Reguły podstawowe bezpieczeństwo .