Authentifier les requêtes REST

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Les SDK Firebase gèrent toutes les authentifications et communications avec la base de données en temps réel Firebase en votre nom. Cependant, lorsque vous êtes dans un environnement qui n'a pas de SDK client ou que vous souhaitez éviter la surcharge d'une connexion persistante à la base de données, vous pouvez utiliser l'API REST Realtime Database pour lire et écrire des données.

Authentifiez les utilisateurs via l'une des méthodes suivantes :

  1. Jetons d'accès Google OAuth2 - En règle générale, la possibilité de lire et d'écrire dans la base de données en temps réel est régie par les règles de la base de données en temps réel . Cependant, vous pouvez accéder à vos données à partir d'un serveur et accorder à ce serveur un accès complet en lecture et en écriture à vos données avec un jeton d'accès Google OAuth2 généré à partir d'un compte de service.

  2. Jetons d'identification Firebase - Vous pouvez également envoyer des demandes authentifiées en tant qu'utilisateur individuel, comme limiter l'accès avec les règles de base de données en temps réel sur les SDK clients. L'API REST accepte les mêmes jetons d'identification Firebase utilisés par les SDK clients.

Jetons d'accès Google OAuth2

Toutes les données publiquement accessibles en lecture ou en écriture conformément à vos règles de base de données en temps réel sont également accessibles en lecture et en écriture via l'API REST sans aucune authentification. Cependant, si vous souhaitez que votre serveur contourne vos règles de base de données en temps réel, vous devez authentifier vos demandes de lecture et d'écriture. L'authentification via Google OAuth2 nécessite les étapes suivantes :

  1. Générez un jeton d'accès.
  2. Authentifiez-vous avec ce jeton d'accès.

Générer un jeton d'accès

L'API REST de la base de données en temps réel accepte les jetons d'accès Google OAuth2 standard. Les jetons d'accès peuvent être générés à l'aide d'un compte de service disposant des autorisations appropriées pour votre base de données en temps réel. Cliquer sur le bouton Générer une nouvelle clé privée en bas de la section Comptes de service de la console Firebase vous permet de générer facilement un nouveau fichier de clé de compte de service si vous n'en avez pas déjà un.

Une fois que vous disposez d'un fichier de clé de compte de service, vous pouvez utiliser l'une des bibliothèques clientes de l'API Google pour générer un jeton d'accès Google OAuth2 avec les champs d'application requis suivants :

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

Voici quelques exemples d'implémentations qui montrent comment créer des jetons d'accès Google OAuth2 pour s'authentifier auprès de l'API REST de la base de données en temps réel dans une variété de langues :

Node.js

Utilisation de la bibliothèque cliente de l'API Google pour 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

Utilisation de la bibliothèque cliente de l'API Google pour 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

Utilisation de la bibliothèque 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

S'authentifier avec un jeton d'accès

Pour envoyer des demandes authentifiées à l'API REST de la base de données en temps réel, transmettez le jeton d'accès Google OAuth2 généré ci-dessus comme en-tête Authorization: Bearer <ACCESS_TOKEN> ou le paramètre de chaîne de requête access_token=<ACCESS_TOKEN> . Voici un exemple de requête curl pour lire le nom d'Ada :

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

Assurez-vous de remplacer <DATABASE_NAME> par le nom de votre base de données en temps réel et <ACCESS_TOKEN> par un jeton d'accès Google OAuth2.

Une demande réussie sera indiquée par un code d'état HTTP 200 OK . La réponse contient les données récupérées :

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

Jetons d'identification Firebase

Lorsqu'un utilisateur ou un appareil se connecte à l'aide de Firebase Authentication, Firebase crée un jeton d'identification correspondant qui l'identifie de manière unique et lui accorde l'accès à plusieurs ressources, telles que Realtime Database et Cloud Storage. Vous pouvez réutiliser ce jeton d'ID pour authentifier l'API REST de la base de données en temps réel et effectuer des demandes au nom de cet utilisateur.

Générer un jeton d'identification

Pour récupérer le jeton d'ID Firebase à partir du client, suivez les étapes décrites dans Récupérer les jetons d'ID sur les clients .

Notez que les jetons d'identification expirent après une courte période et doivent être utilisés le plus rapidement possible après leur récupération.

S'authentifier avec un jeton d'identification

Pour envoyer des demandes authentifiées à l'API REST de la base de données en temps réel, transmettez le jeton d'identification généré ci-dessus en tant que paramètre de chaîne de requête auth=<ID_TOKEN> . Voici un exemple de requête curl pour lire le nom d'Ada :

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

Assurez-vous de remplacer <DATABASE_NAME> par le nom de votre base de données en temps réel et <ID_TOKEN> par un jeton d'identification Firebase.

Une demande réussie sera indiquée par un code d'état HTTP 200 OK . La réponse contient les données récupérées :

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

Jetons hérités

Si vous utilisez toujours des jetons d'authentification Firebase hérités, nous vous recommandons de mettre à jour votre authentification REST vers l'une des méthodes d'authentification décrites ci-dessus.

L'API REST de la base de données en temps réel prend toujours en charge l'authentification via des jetons d'authentification hérités, y compris les secrets . Les secrets de votre base de données en temps réel se trouvent dans la section Comptes de service de la console Firebase.