Save the date - Google I/O returns May 18-20. Register to get the most out of the digital experience: Build your schedule, reserve space, participate in Q&As, earn Google Developer profile badges, and more. Register now
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Autenticare le richieste REST

Gli SDK Firebase gestiscono tutte le autenticazioni e le comunicazioni con Firebase Realtime Database per tuo conto. Tuttavia, quando ci si trova in un ambiente che non dispone di un SDK client o si desidera evitare il sovraccarico di una connessione al database persistente, è possibile utilizzare l'API REST del database in tempo reale per leggere e scrivere i dati.

Autentica gli utenti tramite uno dei seguenti metodi:

  1. Token di accesso Google OAuth2 : in genere, la capacità di leggere e scrivere nel database in tempo reale è regolata dalle regole del database in tempo reale . Tuttavia, puoi accedere ai tuoi dati da un server e concedere a tale server l'accesso completo in lettura e scrittura ai tuoi dati con un token di accesso Google OAuth2 generato da un account di servizio.

  2. Token ID Firebase : potresti anche voler inviare richieste autenticate come singolo utente, ad esempio limitare l'accesso con le regole del database in tempo reale sugli SDK del client. L'API REST accetta gli stessi token ID Firebase utilizzati dagli SDK client.

Token di accesso Google OAuth2

Tutti i dati leggibili o scrivibili pubblicamente in base alle regole del database in tempo reale sono anche leggibili e scrivibili tramite l'API REST senza alcuna autenticazione. Tuttavia, se desideri che il tuo server ignori le regole del database in tempo reale, devi autenticare le tue richieste di lettura e scrittura. L'autenticazione tramite Google OAuth2 richiede i seguenti passaggi:

  1. Genera un token di accesso.
  2. Autenticati con quel token di accesso.

Genera un token di accesso

L'API REST di Realtime Database accetta token di accesso Google OAuth2 standard. I token di accesso possono essere generati utilizzando un account di servizio con le autorizzazioni appropriate per il database in tempo reale. Facendo clic sul pulsante Genera nuova chiave privata nella parte inferiore della sezione Account di servizio della console Firebase, puoi generare facilmente un nuovo file di chiave dell'account di servizio se non ne hai già uno.

Una volta che hai un file della chiave dell'account di servizio, puoi utilizzare una delle librerie client dell'API di Google per generare un token di accesso OAuth2 di Google con i seguenti ambiti obbligatori:

  • https://www.googleapis.com/auth/userinfo.email
  • https://www.googleapis.com/auth/firebase.database

Di seguito sono riportate alcune implementazioni di esempio che mostrano come creare token di accesso OAuth2 di Google per l'autenticazione all'API REST di Realtime Database in una varietà di lingue:

Node.js

Utilizzo della libreria client dell'API di Google per Node.js :

var {google} = require("googleapis");

// Load the service account key JSON file.
var serviceAccount = require("path/to/serviceAccountKey.json");

// Define the required scopes.
var scopes = [
  "https://www.googleapis.com/auth/userinfo.email",
  "https://www.googleapis.com/auth/firebase.database"
];

// Authenticate a JWT client with the service account.
var jwtClient = new google.auth.JWT(
  serviceAccount.client_email,
  null,
  serviceAccount.private_key,
  scopes
);

// Use the JWT client to generate an access token.
jwtClient.authorize(function(error, tokens) {
  if (error) {
    console.log("Error making request to generate access token:", error);
  } else if (tokens.access_token === null) {
    console.log("Provided service account does not have permission to generate access tokens");
  } else {
    var accessToken = tokens.access_token;

    // See the "Using the access token" section below for information
    // on how to use the access token to send authenticated requests to
    // the Realtime Database REST API.
  }
});

Giava

Utilizzo della libreria client dell'API di Google per Java :

// Load the service account key JSON file
FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json");

// Authenticate a Google credential with the service account
GoogleCredential googleCred = GoogleCredential.fromStream(serviceAccount);

// Add the required scopes to the Google credential
GoogleCredential scoped = googleCred.createScoped(
    Arrays.asList(
      "https://www.googleapis.com/auth/firebase.database",
      "https://www.googleapis.com/auth/userinfo.email"
    )
);

// Use the Google credential to generate an access token
scoped.refreshToken();
String token = scoped.getAccessToken();

// See the "Using the access token" section below for information
// on how to use the access token to send authenticated requests to the
// Realtime Database REST API.

Pitone

Utilizzando la libreria google-auth :

from google.oauth2 import service_account
from google.auth.transport.requests import AuthorizedSession

# Define the required scopes
scopes = [
  "https://www.googleapis.com/auth/userinfo.email",
  "https://www.googleapis.com/auth/firebase.database"
]

# Authenticate a credential with the service account
credentials = service_account.Credentials.from_service_account_file(
    "path/to/serviceAccountKey.json", scopes=scopes)

# Use the credentials object to authenticate a Requests session.
authed_session = AuthorizedSession(credentials)
response = authed_session.get(
    "https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json")

# Or, use the token directly, as described in the "Authenticate with an
# access token" section below. (not recommended)
request = google.auth.transport.requests.Request()
credentials.refresh(request)
access_token = credentials.token

Autentica con un token di accesso

Per inviare richieste autenticate all'API REST di Realtime Database, passare il token di accesso Google OAuth2 generato sopra come Authorization: Bearer <ACCESS_TOKEN> header o access_token=<ACCESS_TOKEN> parametro della stringa di query. Ecco un esempio di richiesta di curl per leggere il nome di Ada:

curl "https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json?access_token=<ACCESS_TOKEN>"

Assicurati di sostituire <DATABASE_NAME> con il nome del tuo Realtime Database e <ACCESS_TOKEN> con un token di accesso Google OAuth2.

Una richiesta riuscita verrà indicata da un codice di stato HTTP 200 OK . La risposta contiene i dati che vengono recuperati:

{"first":"Ada","last":"Lovelace"}

Token ID Firebase

Quando un utente o un dispositivo accede utilizzando Firebase Authentication, Firebase crea un token ID corrispondente che lo identifica in modo univoco e gli concede l'accesso a diverse risorse, come Realtime Database e Cloud Storage. Puoi riutilizzare quel token ID per autenticare l'API REST di Realtime Database ed effettuare richieste per conto di quell'utente.

Genera un token ID

Per recuperare il token ID Firebase dal client, segui i passaggi in Recupero dei token ID sui client .

Tieni presente che i token ID scadono dopo un breve periodo di tempo e devono essere utilizzati il ​​più rapidamente possibile dopo averli recuperati.

Autentica con un token ID

Per inviare richieste autenticate all'API REST di Realtime Database, passare il token ID generato sopra come parametro della stringa di query auth=<ID_TOKEN> . Ecco un esempio di richiesta di curl per leggere il nome di Ada:

curl "https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json?auth=<ID_TOKEN>"

Assicurati di sostituire <DATABASE_NAME> con il nome del tuo Realtime Database e <ID_TOKEN> con un token ID Firebase.

Una richiesta riuscita verrà indicata da un codice di stato HTTP 200 OK . La risposta contiene i dati che vengono recuperati:

{"first":"Ada","last":"Lovelace"}

Gettoni legacy

Se utilizzi ancora i token di autenticazione Firebase legacy, ti consigliamo di aggiornare la tua autenticazione REST a uno dei metodi di autenticazione descritti sopra.

L'API REST del database in tempo reale supporta ancora l'autenticazione tramite token di autenticazione legacy, inclusi i segreti . I segreti del tuo database in tempo reale sono disponibili nella sezione Account di servizio della console Firebase.