Google 致力于为黑人社区推动种族平等。查看具体举措
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

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 creare sistemi di accesso basati sugli utenti e sui ruoli che proteggano i dati dei tuoi utenti, utilizza Firebase Authentication con Firebase Security Rules.

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. La variabile auth contiene le seguenti informazioni:

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

La variabile auth.token contiene i seguenti valori:

Campo Descrizione
email L'indirizzo email associato all'account, se presente.
email_verified true se l'utente ha verificato di avere accesso all'indirizzo email - email . 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 possono essere una delle 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. Ad esempio, auth.token.firebase.identities["google.com"][0] contiene il primo ID utente 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 desideri aggiungere attributi di autenticazione personalizzati, la variabile auth.token contiene anche eventuali attestazioni personalizzate specificate.

Quando l'utente che richiede l'accesso non ha effettuato l'accesso, la variabile auth è null . Puoi sfruttarlo nelle tue regole se, ad esempio, vuoi 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 variabile auth , consulta la documentazione di riferimento per Cloud Firestore , Realtime Database e Cloud Storage .

Sfrutta le informazioni sugli utenti nelle regole

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

Nelle regole, definire in che modo le informazioni nella variabile auth , ovvero le informazioni sull'utente del richiedente, corrispondono alle informazioni sull'utente associate ai dati richiesti.

Ad esempio, la tua app potrebbe voler assicurarsi che gli utenti possano solo leggere e scrivere i propri dati. In questo scenario, vorresti una corrispondenza tra la variabile auth.uid 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"
      }
    }
  }
}

Cloud Storage

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

Puoi sfruttare ulteriormente la variabile auth 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. Assegneresti quell'attributo agli utenti e poi lo sfrutterai nelle regole che concedono l'accesso ai 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 regole. Quindi, la tua regola basata sull'amministratore sarebbe simile al seguente esempio:

Cloud Firestore

service cloud.firestore {
  match "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 Realtime Database e Cloud Storage, crea attestazioni personalizzate in Authentication. È quindi possibile fare riferimento a tali attestazioni personalizzate utilizzando la variabile auth.token .

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

Cloud Storage

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 che sfruttano l'autenticazione, vedere Regole di sicurezza di base .