Mengautentikasi Permintaan REST

Firebase SDK menangani semua autentikasi dan komunikasi dengan Firebase Realtime Database atas nama Anda. Namun, ketika Anda berada di lingkungan yang tidak memiliki SDK klien atau ingin menghindari biaya koneksi database yang terus-menerus, Anda dapat menggunakan REST API Realtime Database untuk membaca dan menulis data.

Lakukan autentikasi pengguna dengan salah satu metode berikut:

  1. Token akses Google OAuth2 - Biasanya, kemampuan untuk membaca dan menulis ke Realtime Database diatur oleh Aturan Realtime Database. Namun, Anda dapat mengakses data dari server dan memberi server tersebut akses baca dan tulis penuh ke data Anda dengan token akses Google OAuth2 yang dihasilkan dari akun layanan.

  2. Token ID Firebase - Anda juga dapat mengirim permintaan terautentikasi sebagai pengguna perorangan, seperti membatasi akses dengan Aturan Realtime Database di SDK klien. REST API menerima token ID Firebase yang sama dengan yang digunakan oleh SDK klien.

Token akses Google OAuth2

Setiap data yang dapat dibaca oleh publik atau yang dapat ditulis sesuai dengan Aturan Realtime Database dapat juga dibaca dan ditulis melalui REST API tanpa memerlukan autentikasi. Namun, jika Anda ingin server mengabaikan Aturan Realtime Database, Anda perlu mengautentikasi permintaan baca dan tulis Anda. Autentikasi melalui Google OAuth2 memerlukan langkah-langkah berikut:

  1. Membuat token akses.
  2. Mengautentikasi dengan token akses tersebut.

Membuat token akses

REST API Realtime Database menerima token akses Google OAuth2 standar. Token akses dapat dihasilkan menggunakan akun layanan dengan izin yang tepat ke Realtime Database. Dengan mengklik tombol Buat Kunci Pribadi Baru di bawah bagian Akun Layanan pada Firebase console, Anda dapat membuat file kunci akun layanan baru dengan mudah jika belum memilikinya.

Setelah memiliki file kunci akun layanan, Anda dapat menggunakan salah satu library klien Google API untuk menghasilkan token akses Google OAuth2 dengan cakupan yang diperlukan berikut ini:

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

Berikut adalah beberapa contoh penerapan yang menunjukkan cara membuat token akses Google OAuth2 untuk melakukan autentikasi ke REST API Realtime Database dalam berbagai bahasa:

Node.js

Menggunakan Library Klien Google API untuk 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

Menggunakan Library Klien Google API untuk 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

Menggunakan library 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

Mengautentikasi dengan token akses

Untuk mengirim permintaan terautentikasi ke REST API Realtime Database, teruskan token akses Google OAuth2 yang dihasilkan di atas sebagai header Authorization: Bearer <ACCESS_TOKEN> atau parameter string kueri access_token=<ACCESS_TOKEN>. Berikut ini adalah contoh permintaan curl untuk membaca nama Ada:

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

Pastikan untuk mengganti <DATABASE_NAME> dengan nama Realtime Database Anda dan <ACCESS_TOKEN> dengan token akses Google OAuth2.

Permintaan yang berhasil akan ditunjukkan dengan kode status HTTP 200 OK. Respons berisi data yang diambil:

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

Token ID Firebase

Saat pengguna atau perangkat melakukan login dengan Firebase Authentication, Firebase membuat token ID yang sesuai yang mengidentifikasi mereka secara unik dan memberi mereka akses ke beberapa resource, seperti Realtime Database dan Cloud Storage. Anda dapat menggunakan kembali token ID tersebut untuk melakukan autentikasi REST API Realtime Database dan mengajukan permintaan atas nama pengguna tersebut.

Menghasilkan token ID

Untuk mengambil token ID Firebase dari klien, ikuti langkah-langkah dalam Mengambil token ID pada klien.

Perhatikan bahwa masa berlaku token ID berakhir dalam waktu singkat dan harus digunakan secepat mungkin setelah diambil.

Mengautentikasi dengan token ID

Untuk mengirim permintaan terautentikasi ke REST API Realtime Database, teruskan token ID yang dihasilkan di atas sebagai parameter string kueri auth=<ID_TOKEN>. Berikut ini adalah contoh permintaan curl untuk membaca nama Ada:

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

Pastikan untuk mengganti <DATABASE_NAME> dengan nama Realtime Database Anda dan <ID_TOKEN> dengan token ID Firebase.

Permintaan yang berhasil akan ditunjukkan dengan kode status HTTP 200 OK. Respons berisi data yang diambil:

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

Token lama

Jika Anda masih menggunakan token autentikasi Firebase yang lama, sebaiknya update autentikasi REST Anda ke salah satu metode autentikasi yang dijelaskan di atas.

REST API Realtime Database masih mendukung autentikasi melalui token autentikasi yang lama, termasuk secret. Secret Realtime Database Anda dapat ditemukan di bagian Akun Layanan pada Firebase console.