Uwierzytelnianie żądań REST

Pakiety SDK Firebase obsługują uwierzytelnianie i komunikację z w Bazie danych czasu rzeczywistego Firebase. Jeśli jednak na koncie w środowisku, w którym nie ma pakietu SDK klienta lub chcesz uniknąć obciążenia trwałego połączenia z bazą danych, możesz użyć funkcji Interfejs Realtime Database REST API do odczytu i zapisu danych.

Uwierzytelniaj użytkowników za pomocą jednej z tych metod:

  1. Tokeny dostępu Google OAuth2 – zwykle możliwość odczytu z zapis w bazie danych czasu rzeczywistego jest regulowany przez Reguły bazy danych czasu rzeczywistego. Możesz jednak uzyskać dostęp do swoich danych z serwera i przyznaj mu pełne uprawnienia do odczytu i zapisu w swojej za pomocą tokena dostępu Google OAuth2 wygenerowanego na koncie usługi.

  2. Tokeny identyfikatorów Firebase – możesz też wysyłać żądania uwierzytelnione. dla pojedynczego użytkownika, na przykład przez ograniczenie dostępu za pomocą reguł Bazy danych czasu rzeczywistego SDK klienta. Interfejs API REST akceptuje te same tokeny identyfikatora Firebase, których używa interfejs SDK klienta.

Tokeny dostępu Google OAuth2

Wszelkie dane, które są dostępne do odczytu lub zapisu zgodnie z Czytelność i możliwość zapisu reguł bazy danych czasu rzeczywistego za pomocą interfejsu API REST bez uwierzytelniania. Jeśli jednak chcesz, aby Twój serwer aby ominąć reguły Bazy danych czasu rzeczywistego, musisz uwierzytelnić odczyt i zapis żądań. Uwierzytelnianie przez Google OAuth2 obejmuje te czynności:

  1. Wygeneruj token dostępu.
  2. Uwierzytelnij się, korzystając z tego tokena dostępu.

Generowanie tokena dostępu

Interfejs Realtime Database REST API akceptuje standardowa Tokeny dostępu Google OAuth2. Tokeny dostępu można wygenerować za pomocą konta usługi o odpowiednim do bazy danych czasu rzeczywistego. Kliknij przycisk Wygeneruj nową prywatną Key na dole Konta usługi konsoli Firebase pozwala łatwo wygenerować nową usługę z kluczem konta.

Mając plik klucza konta usługi, możesz użyć jednej z Biblioteki klienta interfejsów API Google aby wygenerować token dostępu Google OAuth2 z tymi wymaganymi zakresami:

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

Oto kilka przykładów implementacji, które pokazują, jak utworzyć Google OAuth2 tokeny dostępu umożliwiające uwierzytelnianie w interfejsie API REST Realtime Database w różnych językach:

Node.js

Korzystanie z biblioteki klienta interfejsów API Google do 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

Korzystanie z biblioteki klienta interfejsów API Google do 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

Korzystanie z narzędzia google-auth biblioteka:

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

Uwierzytelniaj za pomocą tokena dostępu

Aby wysyłać uwierzytelnione żądania do interfejsu Realtime Database REST API, przekaż Token dostępu Google OAuth2 wygenerowany powyżej jako Authorization: Bearer <ACCESS_TOKEN> lub access_token=<ACCESS_TOKEN> parametr ciągu zapytania. Oto przykład: curl prośbę o odczytanie imienia i nazwiska Ady:

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

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

Udane żądanie jest sygnalizowane kodem stanu HTTP 200 OK. odpowiedź zawiera pobierane dane:

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

Tokeny identyfikatora Firebase

Gdy użytkownik lub urządzenie loguje się za pomocą uwierzytelniania Firebase, Firebase tworzy odpowiadający identyfikatorowi token, który jednoznacznie je identyfikuje i przyznaje dostęp kilka zasobów, takich jak Baza danych czasu rzeczywistego i Cloud Storage. Możesz ponownie wykorzystać do uwierzytelniania interfejsu Realtime Database REST API i wysyłania żądań w imieniu tego użytkownika.

Generowanie tokena identyfikatora

Aby pobrać token identyfikatora Firebase z klienta, wykonaj czynności opisane w Pobieranie tokenów tożsamości z klientów

Pamiętaj, że tokeny tożsamości wygasają po krótkim czasie i należy ich używać jak najszybciej po ich pobraniu.

Uwierzytelnij za pomocą tokena identyfikatora

Aby wysyłać uwierzytelnione żądania do interfejsu Realtime Database REST API, przekaż Token identyfikatora wygenerowany powyżej jako parametr ciągu zapytania auth=<ID_TOKEN>. Tutaj to przykładowe żądanie curl odczytujące imię Ady:

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

Pamiętaj, aby zastąpić <DATABASE_NAME> nazwą swojego Baza danych czasu rzeczywistego i <ID_TOKEN> z tokenem identyfikatora Firebase.

Udane żądanie jest sygnalizowane 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 zaktualizowanie uwierzytelniania REST do jednej z opisanych metod uwierzytelniania. powyżej.

Interfejs Realtime Database REST API nadal obsługuje uwierzytelnianie przez starszą wersję tokeny uwierzytelniania, w tym obiekty tajne. Twoje obiekty tajne Bazy danych czasu rzeczywistego znajdziesz tutaj: Konta usługi w konsoli Firebase.

Obiekty tajne to długotrwałe dane logowania. Zalecamy wygenerowanie nowego obiektu tajnego i unieważnienie istniejącego podczas usuwania użytkowników z tajnym dostępem (na przykład właścicieli) z projektu.