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

Authentifizieren von REST-Anfragen

Die Firebase SDKs übernehmen in Ihrem Namen die gesamte Authentifizierung und Kommunikation mit der Firebase Realtime Database. Wenn Sie sich jedoch in einer Umgebung ohne Client-SDK befinden oder den Overhead einer persistenten Datenbankverbindung vermeiden möchten, können Sie die Echtzeitdatenbank-REST-API zum Lesen und Schreiben von Daten verwenden.

Authentifizieren Sie Benutzer mit einer der folgenden Methoden:

  1. Google OAuth2 Zugriffstoken - In der Regel ist die Fähigkeit , lesen und schreiben auf die Realtime - Datenbank von geregelt Realtime Datenbank - Regeln . Sie können jedoch von einem Server aus auf Ihre Daten zugreifen und diesem Server mit einem von einem Dienstkonto generierten Google OAuth2-Zugriffstoken vollen Lese- und Schreibzugriff auf Ihre Daten gewähren.

  2. Firebase ID - Token - Sie können auch als einzelne Nutzer authentifizierten Anforderungen senden mögen, wie SDKs auf dem Client - Zugang mit Echtzeit - Datenbank - Regeln zu begrenzen. Die REST API akzeptiert dieselben Firebase-ID-Token, die von den Client-SDKs verwendet werden.

Google OAuth2-Zugriffstoken

Alle Daten , die sind öffentlich lesbar oder beschreibbar nach Ihren Realtime Datenbank - Regeln sind auch lesbar und beschreibbar über das REST - API ohne Authentifizierung. Wenn Ihr Server jedoch Ihre Echtzeit-Datenbankregeln umgehen soll, müssen Sie Ihre Lese- und Schreibanforderungen authentifizieren. Die Authentifizierung über Google OAuth2 erfordert die folgenden Schritte:

  1. Generieren Sie ein Zugriffstoken.
  2. Authentifizieren Sie sich mit diesem Zugriffstoken.

Generieren Sie ein Zugriffstoken

Der Echtzeit - Datenbank - REST - API akzeptiert Standard - Zugriffstoken Google OAuth2 . Die Zugriffstoken können mithilfe eines Dienstkontos mit den entsprechenden Berechtigungen für Ihre Echtzeitdatenbank generiert werden. Durch Klicken auf das Erstellen eines neuen Private Key - Taste am unteren Rande des Dienstkontos Abschnitts der Konsole Firebase kann Sie ganz einfach eine neue Dienstkonto Schlüsseldatei generieren , wenn Sie noch keines haben.

Sobald Sie eine Dienstkonto Schlüsseldatei haben, können Sie eine der verwenden Google API - Client - Bibliotheken einen Google OAuth2 Zugriff mit den folgenden erforderlichen Bereichen Token zu generieren:

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

Hier sind einige Beispielimplementierungen, die zeigen, wie Sie Google OAuth2-Zugriffstoken erstellen, um sich bei der Realtime Database REST API in einer Vielzahl von Sprachen zu authentifizieren:

Node.js

Mit Hilfe der Google API - Client - Bibliothek für 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.
  }
});

Java

Mit Hilfe der Google API - Client - Bibliothek für 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.

Python

Mit Hilfe der google-auth - Bibliothek:

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

Authentifizieren Sie sich mit einem Zugriffstoken

Um authentifizierte Anforderungen an die Echtzeitdatenbank - REST - API übergeben Sie den Google OAuth2 Zugriffstoken generiert oben als senden Authorization: Bearer <ACCESS_TOKEN> Header oder die access_token=<ACCESS_TOKEN> Abfrage - String - Parameter. Hier ist ein Beispiel curl Anfrage Ada Namen zu lesen:

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

Achten Sie darauf , ersetzen <DATABASE_NAME> mit dem Namen Ihrer Datenbank und Realtime <ACCESS_TOKEN> mit einer Google - OAuth2 Zugriffstoken.

Eine erfolgreiche Anforderung wird von einem angezeigt werden 200 OK HTTP - Statuscode. Die Antwort enthält die abgerufenen Daten:

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

Firebase-ID-Token

Wenn sich ein Nutzer oder ein Gerät mit Firebase Authentication anmeldet, erstellt Firebase ein entsprechendes ID-Token, das ihn eindeutig identifiziert und ihm Zugriff auf verschiedene Ressourcen wie Echtzeitdatenbank und Cloud-Speicher gewährt. Sie können dieses ID-Token wiederverwenden, um die REST-API der Echtzeitdatenbank zu authentifizieren und Anfragen im Namen dieses Benutzers zu stellen.

Generieren Sie einen ID-Token

Um die Firebase ID abzurufen aus dem Client - Token, die Schritte in Abrufen von ID - Token auf den Clients .

Beachten Sie, dass ID-Token nach kurzer Zeit ablaufen und nach dem Abrufen so schnell wie möglich verwendet werden sollten.

Authentifizieren Sie sich mit einem ID-Token

Um authentifizierte Anforderungen an die Echtzeitdatenbank REST API zu senden, übergeben Sie die ID - Token erzeugt , wie oben die auth=<ID_TOKEN> Abfrage - String - Parameter. Hier ist ein Beispiel curl Anfrage Ada Namen zu lesen:

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

Achten Sie darauf , ersetzen <DATABASE_NAME> mit dem Namen Ihrer Datenbank und Realtime <ID_TOKEN> mit einer Firebase ID - Token.

Eine erfolgreiche Anforderung wird von einem angezeigt werden 200 OK HTTP - Statuscode. Die Antwort enthält die abgerufenen Daten:

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

Legacy-Token

Wenn Sie noch ältere Firebase-Authentifizierungstoken verwenden, empfehlen wir, Ihre REST-Authentifizierung auf eine der oben beschriebenen Authentifizierungsmethoden zu aktualisieren.

Das Echtzeit - Datenbank - REST - API unterstützt weiterhin die Authentifizierung über Legacy - Authentifizierungs - Token, einschließlich Geheimnisse. Ihre Realtime - Datenbank Geheimnisse in der gefunden werden Dienstkonten Abschnitt der Konsole Firebase.