Sicherheitsregeln und Firebase-Authentifizierung

Firebase-Sicherheitsregeln bieten Zugriffskontrolle und Datenvalidierung in einem Format, das mehrere Komplexitätsebenen unterstützt. So erstellen Sie benutzerbasierte und rollenbasierte Zugangssysteme , die Ihre Benutzer sicher zu halten Daten verwenden Firebase - Authentifizierung mit Firebase Sicherheitsregeln.

Benutzer identifizieren

Die Authentifizierung identifiziert Benutzer, die Zugriff auf Ihre Daten anfordern, und stellt diese Informationen als Variable bereit, die Sie in Ihren Regeln nutzen können. Die auth Variable enthält die folgenden Informationen:

  • uid : Eine eindeutige Benutzer - ID an den anfordernden Benutzer zugeordnet.
  • token : Eine Karte von Werten durch Authentifizierung gesammelt.

Die auth.token Variable enthält die folgenden Werte:

Feld Beschreibung
email Die mit dem Konto verknüpfte E-Mail-Adresse, falls vorhanden.
email_verified true , wenn der Benutzer überprüft hat sie Zugriff auf die email - email - Adresse. Einige Anbieter verifizieren automatisch E-Mail-Adressen, deren Inhaber sie sind.
phone_number Die mit dem Konto verknüpfte Telefonnummer, falls vorhanden.
name Der Anzeigename des Benutzers, falls festgelegt.
sub Die Firebase-UID des Nutzers. Dies ist innerhalb eines Projekts einzigartig.
firebase.identities Wörterbuch aller Identitäten, die mit dem Konto dieses Benutzers verknüpft sind. : Die Tasten des Wörterbuchs können Sie eine der folgenden sein email - phone google.com facebook.com github.com twitter.com email , phone , google.com , facebook.com , github.com , twitter.com . Die Werte des Wörterbuchs sind Arrays eindeutiger Bezeichner für jeden Identitätsanbieter, der dem Konto zugeordnet ist. Zum Beispiel auth.token.firebase.identities["google.com"][0] enthält die erste Benutzer - ID Google mit dem Konto verknüpft.
firebase.sign_in_provider Der Anmeldeanbieter, der zum Abrufen dieses Tokens verwendet wurde. : Kann einer der folgenden Strings sein custom , password , phone , anonymous , google.com , facebook.com , github.com , twitter.com .

Wenn Sie kundenspezifische Authentifizierungs Attribute hinzufügen möchten, die auth.token Variable enthält auch alle benutzerdefinierten Ansprüche Sie angeben.

Wenn der Benutzer Zugriff anfordert nicht angemeldet, die auth ist variabel null . Sie können dies in Ihren Regeln nutzen , wenn zum Beispiel möchten Sie Lesezugriff auf authentifizierte Benutzer begrenzen - auth != null . Wir empfehlen jedoch generell, den Schreibzugriff weiter einzuschränken.

Weitere Informationen über den auth - Variable finden Sie in die Referenzdokumentation für Cloud - Firestor , Echtzeit - Datenbank und Cloud Storage .

Nutzung von Benutzerinformationen in Regeln

In der Praxis macht die Verwendung authentifizierter Informationen in Ihren Regeln Ihre Regeln leistungsfähiger und flexibler. Sie können den Zugriff auf Daten basierend auf der Benutzeridentität steuern.

In Ihren Regeln definieren , wie die Informationen in dem auth - Variable - die Benutzerinformationen der Anforderer - die Benutzerinformationen übereinstimmt mit den angeforderten Daten zugeordnet ist .

Ihre App möchte beispielsweise sicherstellen, dass Benutzer nur ihre eigenen Daten lesen und schreiben können. In diesem Szenario würden Sie eine Übereinstimmung zwischen den wollen auth.uid Variable und der Benutzer - ID auf den angeforderten Daten:

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

Echtzeit-Datenbank

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

Cloud-Speicher

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

Definieren Sie benutzerdefinierte Benutzerinformationen

Sie können die Verschuldungs- auth Variable benutzerdefinierte Felder zu Ihrer App - Benutzer zugewiesen zu definieren.

Angenommen, Sie möchten eine "Administrator"-Rolle erstellen, die Schreibzugriff auf bestimmte Pfade ermöglicht. Sie weisen dieses Attribut Benutzern zu und nutzen es dann in den Regeln, die den Zugriff auf die Pfade gewähren.

In Cloud Firestore können Sie den Dokumenten von Nutzern ein benutzerdefiniertes Feld hinzufügen und den Wert dieses Felds mit einem eingebetteten Lesevorgang in Ihre Regeln abrufen. Ihre adminbasierte Regel würde also wie im folgenden Beispiel aussehen:

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

Für Regeln in Echtzeit - Datenbank und Cloud - Speicher, individuelle Ansprüche erstellen in Authentifizierung. Anschließend können Sie die benutzerdefinierten Ansprüche mit der Referenz auth.token variabel.

Echtzeit-Datenbank

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

Cloud-Speicher

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

Um weitere Beispiele für grundlegende Regeln nutzen Authentifizierung, siehe Grundlegende Sicherheitsregeln .