Uwierzytelnij żądania REST

Zestawy SDK Firebase obsługują w Twoim imieniu całe uwierzytelnianie i komunikację z bazą danych Firebase Realtime Database. Jeśli jednak znajdujesz się w środowisku, w którym nie ma pakietu SDK klienta, lub chcesz uniknąć narzutu związanego z trwałym połączeniem z bazą danych, możesz użyć interfejsu API REST bazy danych czasu rzeczywistego do odczytu i zapisu danych.

Uwierzytelnij użytkowników za pomocą jednej z następujących metod:

  1. Tokeny dostępu Google OAuth2 — zazwyczaj możliwość odczytu i zapisu w bazie danych czasu rzeczywistego podlega regułom bazy danych czasu rzeczywistego . Możesz jednak uzyskać dostęp do swoich danych z serwera i przyznać temu serwerowi pełny dostęp do odczytu i zapisu danych za pomocą tokena dostępu Google OAuth2 wygenerowanego z konta usługi.

  2. Tokeny identyfikatora Firebase — możesz także chcieć wysyłać żądania uwierzytelniane jako indywidualny użytkownik, na przykład ograniczając dostęp za pomocą reguł bazy danych czasu rzeczywistego w zestawach SDK klienta. Interfejs API REST akceptuje te same tokeny identyfikatora Firebase, które są używane przez zestawy SDK klienta.

Tokeny dostępu Google OAuth2

Wszelkie dane, które można publicznie odczytać lub zapisać zgodnie z Zasadami bazy danych czasu rzeczywistego, można również odczytywać i zapisywać za pośrednictwem interfejsu API REST bez żadnego uwierzytelniania. Jeśli jednak chcesz, aby serwer omijał reguły bazy danych czasu rzeczywistego, musisz uwierzytelnić żądania odczytu i zapisu. Uwierzytelnianie za pomocą Google OAuth2 wymaga wykonania następujących kroków:

  1. Wygeneruj token dostępu.
  2. Uwierzytelnij się za pomocą tego tokena dostępu.

Wygeneruj token dostępu

Interfejs API REST bazy danych czasu rzeczywistego akceptuje standardowe tokeny dostępu Google OAuth2 . Tokeny dostępu można wygenerować korzystając z konta usługi posiadającego odpowiednie uprawnienia do Bazy Danych Realtime. Kliknięcie przycisku Wygeneruj nowy klucz prywatny na dole sekcji Konta usług w konsoli Firebase umożliwia łatwe wygenerowanie nowego pliku klucza konta usługi, jeśli jeszcze go nie masz.

Gdy już będziesz mieć plik klucza konta usługi, możesz użyć jednej z bibliotek klienta Google API, aby wygenerować token dostępu Google OAuth2 z następującymi wymaganymi zakresami:

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

Oto kilka przykładowych implementacji pokazujących, jak utworzyć tokeny dostępu Google OAuth2 w celu uwierzytelnienia w interfejsie API REST bazy danych Realtime w różnych językach:

Node.js

Korzystanie z biblioteki klienta Google API dla 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.
  }
});

Jawa

Korzystanie z biblioteki klienta API Google dla języka 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.

Pyton

Korzystanie z biblioteki 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

Uwierzytelnij się za pomocą tokena dostępu

Aby wysyłać uwierzytelnione żądania do interfejsu API REST bazy danych Realtime, przekaż wygenerowany powyżej token dostępu Google OAuth2 jako nagłówek Authorization: Bearer <ACCESS_TOKEN> lub parametr ciągu zapytania access_token=<ACCESS_TOKEN> . Oto przykładowe żądanie curl , aby przeczytać imię Ady:

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

Pamiętaj, aby zastąpić <DATABASE_NAME> nazwą swojej bazy danych czasu rzeczywistego i <ACCESS_TOKEN> tokenem dostępu Google OAuth2.

Pomyślne żądanie zostanie zasygnalizowane kodem stanu HTTP 200 OK . Odpowiedź zawiera pobierane dane:

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

Tokeny identyfikacyjne Firebase

Gdy użytkownik lub urządzenie loguje się przy użyciu uwierzytelniania Firebase, Firebase tworzy odpowiedni token identyfikacyjny, który jednoznacznie go identyfikuje i zapewnia dostęp do kilku zasobów, takich jak baza danych w czasie rzeczywistym i magazyn w chmurze. Możesz ponownie użyć tego tokena identyfikacyjnego do uwierzytelnienia interfejsu API REST bazy danych czasu rzeczywistego i wysyłania żądań w imieniu tego użytkownika.

Wygeneruj token identyfikacyjny

Aby pobrać token identyfikatora Firebase od klienta, wykonaj kroki opisane w artykule Odzyskiwanie tokenów identyfikatora na klientach .

Należy pamiętać, że tokeny identyfikacyjne wygasają po krótkim czasie i należy je wykorzystać jak najszybciej po ich odzyskaniu.

Uwierzytelnij się za pomocą tokena identyfikacyjnego

Aby wysyłać uwierzytelnione żądania do interfejsu API REST bazy danych czasu rzeczywistego, przekaż wygenerowany powyżej token identyfikatora jako parametr ciągu zapytania auth=<ID_TOKEN> . Oto przykładowe żądanie curl , aby przeczytać imię Ady:

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

Pamiętaj, aby zastąpić <DATABASE_NAME> nazwą swojej bazy danych czasu rzeczywistego i <ID_TOKEN> tokenem identyfikacyjnym Firebase.

Pomyślne żądanie zostanie zasygnalizowane kodem stanu HTTP 200 OK . Odpowiedź zawiera pobierane dane:

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

Starsze tokeny

Jeśli nadal używasz starszych tokenów uwierzytelniania Firebase, zalecamy aktualizację uwierzytelniania REST do jednej z metod uwierzytelniania opisanych powyżej.

Interfejs API REST bazy danych czasu rzeczywistego nadal obsługuje uwierzytelnianie za pomocą starszych tokenów uwierzytelniania, w tym kluczy tajnych . Twoje sekrety bazy danych czasu rzeczywistego można znaleźć w sekcji Konta usług w konsoli Firebase.

Sekrety to długotrwałe dane uwierzytelniające. Zalecamy wygenerowanie nowego sekretu i unieważnienie istniejącego podczas usuwania użytkowników z tajnym dostępem (takich jak właściciele) z projektu.