Regole di sicurezza e autenticazione Firebase

Le regole di sicurezza Firebase forniscono il controllo degli accessi e la convalida dei dati in un formato che supporta più livelli di complessità. Per user-based costruzione e sistemi di accesso basati sui ruoli che mantengono al sicuro i dati dei vostri utenti, utilizzare Firebase Autenticazione con Firebase norme di sicurezza.

Identifica gli utenti

L'autenticazione identifica gli utenti che richiedono l'accesso ai tuoi dati e fornisce tali informazioni come una variabile che puoi sfruttare nelle tue regole. L' auth variabile contiene le seguenti informazioni:

  • uid : un ID utente univoco, assegnato all'utente richiedente.
  • token : Una mappa dei valori raccolti da autenticazione.

Il auth.token variabile contiene i seguenti valori:

Campo Descrizione
email L'indirizzo email associato all'account, se presente.
email_verified true se l'utente ha verificato che hanno accesso alla email l'indirizzo. Alcuni provider verificano automaticamente gli indirizzi email di loro proprietà.
phone_number Il numero di telefono associato all'account, se presente.
name Il nome visualizzato dell'utente, se impostato.
sub L'UID Firebase dell'utente. Questo è unico all'interno di un progetto.
firebase.identities Dizionario di tutte le identità associate all'account di questo utente. Le chiavi del dizionario può essere uno dei seguenti: email , phone , google.com , facebook.com , github.com , twitter.com . I valori del dizionario sono matrici di identificatori univoci per ogni provider di identità associato all'account. Per esempio, auth.token.firebase.identities["google.com"][0] contiene il primo ID utente di Google associato all'account.
firebase.sign_in_provider Il provider di accesso utilizzato per ottenere questo token. Può essere una delle seguenti stringhe: custom , password , phone , anonymous , google.com , facebook.com , github.com , twitter.com .

Se si desidera aggiungere attributi di autenticazione personalizzati, il auth.token variabile contiene anche eventuali attestazioni personalizzate specificate.

Quando l'utente richiede l'accesso non è firmato in, l' auth variabile è null . È possibile sfruttare questo nelle regole se, ad esempio, si desidera limitare l'accesso in lettura agli utenti autenticati - auth != null . Tuttavia, in genere consigliamo di limitare ulteriormente l'accesso in scrittura.

Per ulteriori informazioni sulla auth variabile, vedere la documentazione di riferimento per cloud FireStore , in tempo reale del database , e Cloud Storage .

Sfrutta le informazioni dell'utente nelle regole

In pratica, l'utilizzo di informazioni autenticate nelle regole rende le regole più potenti e flessibili. Puoi controllare l'accesso ai dati in base all'identità dell'utente.

Nelle vostre regole, definire come le informazioni in auth variabile - le informazioni utente del richiedente - corrisponde alle informazioni utente associato con i dati richiesti.

Ad esempio, la tua app potrebbe voler assicurarsi che gli utenti possano solo leggere e scrivere i propri dati. In questo scenario, si vorrebbe una corrispondenza tra la auth.uid variabile e l'ID utente sui dati richiesti:

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

Database in tempo reale

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

Archiviazione cloud

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

Definisci le informazioni utente personalizzate

È possibile sfruttare ulteriormente l' auth variabile per definire i campi personalizzati assegnati agli utenti della tua app.

Ad esempio, supponi di voler creare un ruolo "admin" che abiliti l'accesso in scrittura su determinati percorsi. Assegnare quell'attributo agli utenti e quindi sfruttarlo nelle regole che concedono l'accesso sui percorsi.

In Cloud Firestore, puoi aggiungere un campo personalizzato ai documenti degli utenti e recuperare il valore di quel campo con una lettura incorporata nelle tue regole. Quindi, la tua regola basata sull'amministratore sarebbe simile al seguente esempio:

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

Per le regole in tempo reale del database e Cloud Storage, creare attestazioni personalizzate in autenticazione. È quindi possibile fare riferimento a tali crediti personalizzati utilizzando auth.token variabile.

Database in tempo reale

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

Archiviazione cloud

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

Per vedere altri esempi di regole di base Uso dell'autenticazione, vedere Regole di sicurezza di base .