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:
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.
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:
- Membuat token akses.
- 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 Anda. 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 dan <ACCESS_TOKEN>
Anda 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
Jika pengguna atau perangkat berhasil login menggunakan Firebase Authentication, Firebase akan membuat token ID yang sesuai dan dapat mengidentifikasi pengguna atau perangkat tersebut secara unik dan memberikannya 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 dan <ID_TOKEN>
Anda 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 Service Accounts di Firebase console.
Secret adalah kredensial yang dapat digunakan untuk jangka waktu lama. Sebaiknya buat secret baru dan cabut secret yang ada saat menghapus pengguna dengan akses secret (seperti pemilik) dari project.