Die Firebase SDKs übernehmen die gesamte Authentifizierung und Kommunikation mit Firebase Realtime Database in Ihrem Namen. Wenn Sie sich jedoch in einer Umgebung befinden, die kein Client-SDK hat, oder wenn Sie den Aufwand einer persistenten Datenbankverbindung vermeiden möchten, können Sie die Realtime Database REST API verwenden, um Daten zu lesen und zu schreiben.
Authentifizieren Sie Nutzer mit einer der folgenden Methoden:
Google OAuth2-Zugriffstokens: In der Regel wird die Möglichkeit, aus der Realtime Database zu lesen und in sie zu schreiben, durch Realtime Database-Regeln gesteuert. Sie können jedoch von einem Server aus auf Ihre Daten zugreifen und diesem Server mit einem von einem Dienstkonto generierten Google OAuth2-Zugriffstoken vollständigen Lese- und Schreibzugriff auf Ihre Daten gewähren.
Firebase-ID-Tokens: Sie können auch Anfragen senden, die als einzelner Nutzer authentifiziert sind, z. B. den Zugriff mit Realtime Database-Regeln für die Client-SDKs einschränken. Die REST API akzeptiert dieselben Firebase-ID-Tokens, die von den Client-SDKs verwendet werden.
Google OAuth2-Zugriffstokens
Alle Daten, die gemäß Ihren Realtime Database-Regeln öffentlich lesbar oder beschreibbar sind, können auch über die REST API ohne Authentifizierung gelesen und beschrieben werden. Wenn Sie jedoch möchten, dass Ihr Server Ihre Realtime Database-Regeln umgeht, müssen Sie Ihre Lese- und Schreibanfragen authentifizieren. Für die Authentifizierung über Google OAuth2 sind die folgenden Schritte erforderlich:
- Zugriffstoken erstellen
- Authentifizieren Sie sich mit diesem Zugriffstoken.
Zugriffstoken erstellen
Die Realtime Database REST API akzeptiert standardmäßige Google OAuth2-Zugriffstokens. Die Zugriffstokens können mit einem Dienstkonto mit den entsprechenden Berechtigungen für Ihr Realtime Database generiert werden. Wenn Sie unten im Abschnitt Dienstkonten der Firebase Console auf den Button Neuen privaten Schlüssel generieren klicken, können Sie ganz einfach eine neue Dienstkontoschlüsseldatei generieren, falls Sie noch keine haben.
Sobald Sie eine Dienstkontoschlüsseldatei haben, können Sie mit einer der Google API-Clientbibliotheken ein Google OAuth2-Zugriffstoken mit den folgenden erforderlichen Bereichen generieren:
https://www.googleapis.com/auth/userinfo.emailhttps://www.googleapis.com/auth/firebase.database
Hier sind einige Beispielimplementierungen, die zeigen, wie Sie Google OAuth2-Zugriffstokens erstellen, um sich in verschiedenen Sprachen bei der Realtime Database REST API zu authentifizieren:
Node.js
Mit der Google API-Clientbibliothek 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 der Google API-Clientbibliothek 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 der Bibliothek 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
Mit einem Zugriffstoken authentifizieren
Wenn Sie authentifizierte Anfragen an die Realtime Database REST API senden möchten, übergeben Sie das oben generierte Google OAuth2-Zugriffstoken als Authorization: Bearer <ACCESS_TOKEN>-Header oder als access_token=<ACCESS_TOKEN>-Abfragestringparameter. Hier ist ein Beispiel für eine curl-Anfrage zum Lesen des Namens von Ada:
curl "https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json?access_token=<ACCESS_TOKEN>"
Ersetzen Sie <DATABASE_NAME> durch den Namen Ihres Realtime Database und <ACCESS_TOKEN> durch ein Google OAuth2-Zugriffstoken.
Eine erfolgreiche Anfrage wird durch den HTTP-Statuscode 200 OK angezeigt. Die Antwort enthält die abgerufenen Daten:
{"first":"Ada","last":"Lovelace"}
Firebase-ID-Tokens
Wenn sich ein Nutzer oder ein Gerät mit Firebase Authentication anmeldet, erstellt Firebase ein entsprechendes ID-Token, das den Nutzer oder das Gerät eindeutig identifiziert und Zugriff auf mehrere Ressourcen wie Realtime Database und Cloud Storage gewährt. Sie können dieses ID-Token wiederverwenden, um die Realtime Database REST API zu authentifizieren und Anfragen im Namen dieses Nutzers zu stellen.
ID-Token generieren
Folgen Sie der Anleitung unter ID-Tokens auf Clients abrufen, um das Firebase-ID-Token vom Client abzurufen.
Beachten Sie, dass ID-Tokens nach kurzer Zeit ablaufen und so schnell wie möglich nach dem Abrufen verwendet werden sollten.
Mit einem ID-Token authentifizieren
Wenn Sie authentifizierte Anfragen an die Realtime Database REST API senden möchten, übergeben Sie das oben generierte ID-Token als Abfragestring-Parameter auth=<ID_TOKEN>. Hier ist ein Beispiel für eine curl-Anfrage zum Lesen des Namens von Ada:
curl "https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json?auth=<ID_TOKEN>"
Ersetzen Sie <DATABASE_NAME> durch den Namen Ihres Realtime Database und <ID_TOKEN> durch ein Firebase-ID-Token.
Eine erfolgreiche Anfrage wird durch den HTTP-Statuscode 200 OK angezeigt. Die Antwort enthält die abgerufenen Daten:
{"first":"Ada","last":"Lovelace"}
Legacy-Tokens
Wenn Sie noch alte Firebase-Authentifizierungstokens verwenden, empfehlen wir, Ihre REST-Authentifizierung auf eine der oben beschriebenen Authentifizierungsmethoden umzustellen.
Die Realtime Database REST API unterstützt weiterhin die Authentifizierung über Legacy-Authentifizierungstokens, einschließlich Secrets. Ihre Realtime Database-Secrets finden Sie in der Firebase Console im Bereich Dienstkonten.
Secrets sind langlebige Anmeldedaten. Wir empfehlen, ein neues Secret zu generieren und das vorhandene zu widerrufen, wenn Nutzer mit Secret-Zugriff (z. B. Inhaber) aus einem Projekt entfernt werden.