Menambahkan Firebase Admin SDK ke server

Admin SDK adalah serangkaian library server yang dapat Anda gunakan untuk berinteraksi dengan Firebase dari lingkungan istimewa untuk melakukan berbagai tindakan, antara lain:

  • Melakukan kueri dan mutasi pada layanan Firebase Data Connect untuk pengelolaan data massal dan operasi lainnya dengan hak istimewa admin penuh.
  • Membaca dan menulis data Realtime Database dengan hak istimewa admin penuh.
  • Mengirim pesan Firebase Cloud Messaging secara terprogram menggunakan pendekatan alternatif yang sederhana terhadap protokol server Firebase Cloud Messaging.
  • Membuat dan memverifikasi token autentikasi Firebase.
  • Mengakses resource Google Cloud seperti bucket Cloud Storage dan database Cloud Firestore yang terkait dengan project Firebase Anda.
  • Membuat konsol admin sederhana untuk melakukan hal-hal seperti mencari data pengguna atau mengubah alamat email pengguna untuk autentikasi.

Jika Anda tertarik untuk menggunakan Node.js SDK sebagai klien untuk akses pengguna akhir (misalnya, di aplikasi desktop Node.js atau IoT), bukan untuk akses admin dari lingkungan istimewa (seperti server), ikuti petunjuk untuk menyiapkan JavaScript SDK klien.

Berikut adalah matriks fitur yang menunjukkan fitur Firebase yang didukung dalam setiap bahasa:

Fitur Node.js Java Python Go C#
Pembuatan Token Kustom
Verifikasi Token ID
Pengelolaan Pengguna
Mengontrol Akses dengan Klaim Kustom
Pencabutan Token Refresh
Mengimpor Pengguna
Pengelolaan Cookie Sesi
Membuat Link Tindakan Email
Mengelola konfigurasi penyedia SAML/OIDC
Dukungan multi-tenancy
Firebase Data Connect
Realtime Database *
Firebase Cloud Messaging
FCM Multicast
Mengelola FCM Langganan Topik
Cloud Storage
Cloud Firestore
Mengantrekan fungsi dengan Cloud Tasks
Pengelolaan Proyek
Aturan Keamanan
Pengelolaan Model ML
Firebase Remote Config
Firebase App Check
Firebase Extensions

Guna mempelajari integrasi Admin SDK untuk penggunaan ini lebih lanjut, tinjau dokumentasi Realtime Database, FCM, Authentication, Remote Config, dan Cloud Storage yang terkait. Bagian lainnya halaman ini berfokus pada penyiapan dasar untuk Admin SDK.

Prasyarat

  • Pastikan Anda memiliki aplikasi server.

  • Pastikan server Anda menjalankan hal-hal berikut, sesuai dengan Admin SDK yang Anda gunakan:

    • Admin Node.js SDK — Node.js 18+
    • Admin Java SDK — Java 8+
    • Admin Python SDK — Python 3.7+ (rekomendasi Python 3.8+)
      Dukungan Python 3.7 tidak digunakan lagi.
    • Admin Go SDK — Go 1.21+
    • Admin .NET SDK — .NET Framework 4.6.2+ atau .NET Standard 2.0 untuk .NET 6.0+

Menyiapkan project dan akun layanan Firebase

Untuk menggunakan Firebase Admin SDK, Anda memerlukan hal berikut:

  • Project Firebase.
  • Akun layanan Firebase Admin SDK untuk berkomunikasi dengan Firebase. Akun layanan ini dibuat secara otomatis saat Anda membuat project Firebase atau menambahkan Firebase ke project Google Cloud.
  • File konfigurasi dengan kredensial akun layanan Anda.

Jika belum memiliki project Firebase, Anda harus membuatnya di Firebase console. Buka bagian Memahami Project Firebase untuk mempelajari project Firebase lebih lanjut.

Menambahkan SDK

Jika menyiapkan project baru, Anda harus menginstal SDK untuk bahasa yang Anda pilih.

Node.js

Firebase Admin Node.js SDK tersedia di npm. Jika Anda belum memiliki file package.json, buat file tersebut melalui npm init. Selanjutnya, instal paket npm firebase-admin dan simpan ke package.json Anda:

npm install firebase-admin --save

Untuk menggunakan modul tersebut di aplikasi Anda, terapkan require padanya dari file JavaScript apa pun:

const { initializeApp } = require('firebase-admin/app');

Jika menggunakan ES2015, Anda dapat menerapkan import pada modul tersebut:

import { initializeApp } from 'firebase-admin/app';

Java

Firebase Admin Java SDK dipublikasikan ke repositori pusat Maven. Untuk menginstal library tersebut, deklarasikan sebagai dependensi di file build.gradle Anda:

dependencies {
  implementation 'com.google.firebase:firebase-admin:9.4.1'
}

Jika menggunakan Maven untuk mem-build aplikasi, Anda dapat menambahkan dependensi berikut ke pom.xml:

<dependency>
  <groupId>com.google.firebase</groupId>
  <artifactId>firebase-admin</artifactId>
  <version>9.4.1</version>
</dependency>

Python

Firebase Admin Python SDK tersedia melalui pip. Anda dapat menginstal library tersebut untuk semua pengguna melalui sudo:

sudo pip install firebase-admin

Atau, Anda dapat menginstal library hanya untuk pengguna saat ini dengan meneruskan flag --user:

pip install --user firebase-admin

Go

Go Admin SDK dapat diinstal menggunakan utilitas go get:

# Install the latest version:
go get firebase.google.com/go/v4@latest

# Or install a specific version:
go get firebase.google.com/go/[email protected]

C#

Admin SDK .NET dapat diinstal menggunakan pengelola paket .NET:

Install-Package FirebaseAdmin -Version 3.1.0

Sebagai alternatif, Anda dapat menginstalnya menggunakan aplikasi utilitas command line dotnet:

dotnet add package FirebaseAdmin --version 3.1.0

Atau, Anda dapat menginstalnya dengan menambahkan entri referensi paket berikut ke file .csproj Anda:

<ItemGroup>
  <PackageReference Include="FirebaseAdmin" Version="3.1.0" />
</ItemGroup>

Menginisialisasi SDK

Setelah membuat project Firebase, Anda dapat menginisialisasi SDK dengan Kredensial Default Aplikasi Google. Karena pencarian kredensial default sepenuhnya otomatis di lingkungan Google, tanpa perlu menyediakan variabel lingkungan atau konfigurasi lain, cara menginisialisasi SDK ini sangat direkomendasikan untuk aplikasi yang berjalan di lingkungan Google seperti Cloud Run, App Engine, dan Cloud Functions.

Guna menentukan opsi inisialisasi untuk layanan seperti Realtime Database, Cloud Storage, atau Cloud Functions, gunakan variabel lingkungan FIREBASE_CONFIG. Jika isi variabel FIREBASE_CONFIG dimulai dengan {, isi tersebut akan diurai sebagai objek JSON. Jika tidak, SDK akan menganggap bahwa string tersebut adalah jalur file JSON yang berisi opsi.

Node.js

const app = initializeApp();

Java

FirebaseApp.initializeApp();

Python

default_app = firebase_admin.initialize_app()

Go

app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

C#

FirebaseApp.Create();

Setelah diinisialisasi, Anda dapat menggunakan Admin SDK untuk menyelesaikan jenis tugas berikut:

Menggunakan token refresh OAuth 2.0

Admin SDK juga menyediakan kredensial yang memungkinkan Anda melakukan autentikasi dengan token refresh Google OAuth2:

Node.js

const myRefreshToken = '...'; // Get refresh token from OAuth2 flow

initializeApp({
  credential: refreshToken(myRefreshToken),
  databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
});

Java

FileInputStream refreshToken = new FileInputStream("path/to/refreshToken.json");

FirebaseOptions options = FirebaseOptions.builder()
    .setCredentials(GoogleCredentials.fromStream(refreshToken))
    .setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
    .build();

FirebaseApp.initializeApp(options);

Python

cred = credentials.RefreshToken('path/to/refreshToken.json')
default_app = firebase_admin.initialize_app(cred)

Go

opt := option.WithCredentialsFile("path/to/refreshToken.json")
config := &firebase.Config{ProjectID: "my-project-id"}
app, err := firebase.NewApp(context.Background(), config, opt)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

C#

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.FromFile("path/to/refreshToken.json"),
});

Menginisialisasi SDK di lingkungan non-Google

Jika Anda bekerja di lingkungan server non-Google yang pencarian kredensial defaultnya tidak dapat diotomatiskan sepenuhnya, Anda dapat menginisialisasi SDK dengan file kunci akun layanan yang diekspor.

Project Firebase mendukung akun layanan Google, yang dapat Anda gunakan untuk memanggil API server Firebase dari server aplikasi atau lingkungan tepercaya. Jika Anda mengembangkan kode secara lokal atau men-deploy aplikasi secara lokal, gunakan kredensial yang diperoleh melalui akun layanan ini untuk mengizinkan permintaan server.

Untuk mengautentikasi akun layanan dan memberinya akses ke layanan Firebase, Anda harus membuat file kunci pribadi dalam format JSON.

Untuk membuat file kunci pribadi untuk akun layanan Anda:

  1. Di Firebase console, buka Settings > Service Accounts.

  2. Klik Generate New Private Key, lalu konfirmasikan dengan mengklik Generate Key.

  3. Simpan dengan aman file JSON yang memuat kunci tersebut.

Saat Anda memberi otorisasi melalui akun layanan, ada dua opsi untuk menyediakan kredensial ke aplikasi. Anda dapat menetapkan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS, atau secara eksplisit meneruskan jalur ke kunci akun layanan dalam kode. Opsi pertama lebih aman dan sangat direkomendasikan.

Untuk menetapkan variabel lingkungan:

Tetapkan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS ke jalur file JSON yang berisi kunci akun layanan Anda. Variabel ini hanya berlaku untuk sesi shell Anda saat ini. Jadi, jika Anda membuka sesi baru, tetapkan variabel kembali.

Linux atau macOS

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

Windows

Dengan PowerShell:

$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"

Setelah Anda menyelesaikan langkah-langkah di atas, Kredensial Default Aplikasi (ADC) secara implisit dapat menentukan kredensial sehingga Anda dapat menggunakan kredensial akun layanan saat menguji atau beroperasi di lingkungan non-Google.

Inisialisasi SDK seperti yang ditunjukkan:

Node.js

initializeApp({
    credential: applicationDefault(),
    databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
});

Java

FirebaseOptions options = FirebaseOptions.builder()
    .setCredentials(GoogleCredentials.getApplicationDefault())
    .setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
    .build();

FirebaseApp.initializeApp(options);

Python

default_app = firebase_admin.initialize_app()

Go

app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

C#

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.GetApplicationDefault(),
    ProjectId = "my-project-id",
});

Menginisialisasi beberapa aplikasi

Pada umumnya, Anda hanya perlu menginisialisasi satu aplikasi default. Anda dapat mengakses layanan dari aplikasi tersebut dengan dua cara yang setara:

Node.js

// Initialize the default app
const defaultApp = initializeApp(defaultAppConfig);

console.log(defaultApp.name);  // '[DEFAULT]'

// Retrieve services via the defaultApp variable...
let defaultAuth = getAuth(defaultApp);
let defaultDatabase = getDatabase(defaultApp);

// ... or use the equivalent shorthand notation
defaultAuth = getAuth();
defaultDatabase = getDatabase();

Java

// Initialize the default app
FirebaseApp defaultApp = FirebaseApp.initializeApp(defaultOptions);

System.out.println(defaultApp.getName());  // "[DEFAULT]"

// Retrieve services by passing the defaultApp variable...
FirebaseAuth defaultAuth = FirebaseAuth.getInstance(defaultApp);
FirebaseDatabase defaultDatabase = FirebaseDatabase.getInstance(defaultApp);

// ... or use the equivalent shorthand notation
defaultAuth = FirebaseAuth.getInstance();
defaultDatabase = FirebaseDatabase.getInstance();

Python

# Import the Firebase service
from firebase_admin import auth

# Initialize the default app
default_app = firebase_admin.initialize_app(cred)
print(default_app.name)  # "[DEFAULT]"

# Retrieve services via the auth package...
# auth.create_custom_token(...)

Go

// Initialize default app
app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

// Access auth service from the default app
client, err := app.Auth(context.Background())
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

C#

// Initialize the default app
var defaultApp = FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.GetApplicationDefault(),
});
Console.WriteLine(defaultApp.Name); // "[DEFAULT]"

// Retrieve services by passing the defaultApp variable...
var defaultAuth = FirebaseAuth.GetAuth(defaultApp);

// ... or use the equivalent shorthand notation
defaultAuth = FirebaseAuth.DefaultInstance;

Beberapa kasus penggunaan mengharuskan Anda membuat beberapa aplikasi secara bersamaan. Misalnya, Anda mungkin ingin membaca data dari Realtime Database milik satu project Firebase dan membuat token kustom untuk project lainnya. Atau, Anda mungkin ingin mengautentikasi dua aplikasi dengan kredensial terpisah. Dengan Firebase SDK, Anda dapat membuat beberapa aplikasi secara bersamaan, masing-masing dengan informasi konfigurasinya sendiri.

Node.js

// Initialize the default app
initializeApp(defaultAppConfig);

// Initialize another app with a different config
var otherApp = initializeApp(otherAppConfig, 'other');

console.log(getApp().name);  // '[DEFAULT]'
console.log(otherApp.name);     // 'other'

// Use the shorthand notation to retrieve the default app's services
const defaultAuth = getAuth();
const defaultDatabase = getDatabase();

// Use the otherApp variable to retrieve the other app's services
const otherAuth = getAuth(otherApp);
const otherDatabase = getDatabase(otherApp);

Java

// Initialize the default app
FirebaseApp defaultApp = FirebaseApp.initializeApp(defaultOptions);

// Initialize another app with a different config
FirebaseApp otherApp = FirebaseApp.initializeApp(otherAppConfig, "other");

System.out.println(defaultApp.getName());  // "[DEFAULT]"
System.out.println(otherApp.getName());    // "other"

// Use the shorthand notation to retrieve the default app's services
FirebaseAuth defaultAuth = FirebaseAuth.getInstance();
FirebaseDatabase defaultDatabase = FirebaseDatabase.getInstance();

// Use the otherApp variable to retrieve the other app's services
FirebaseAuth otherAuth = FirebaseAuth.getInstance(otherApp);
FirebaseDatabase otherDatabase = FirebaseDatabase.getInstance(otherApp);

Python

# Initialize the default app
default_app = firebase_admin.initialize_app(cred)

#  Initialize another app with a different config
other_app = firebase_admin.initialize_app(cred, name='other')

print(default_app.name)    # "[DEFAULT]"
print(other_app.name)      # "other"

# Retrieve default services via the auth package...
# auth.create_custom_token(...)

# Use the `app` argument to retrieve the other app's services
# auth.create_custom_token(..., app=other_app)

Go

// Initialize the default app
defaultApp, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

// Initialize another app with a different config
opt := option.WithCredentialsFile("service-account-other.json")
otherApp, err := firebase.NewApp(context.Background(), nil, opt)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

// Access Auth service from default app
defaultClient, err := defaultApp.Auth(context.Background())
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

// Access auth service from other app
otherClient, err := otherApp.Auth(context.Background())
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

C#

// Initialize the default app
var defaultApp = FirebaseApp.Create(defaultOptions);

// Initialize another app with a different config
var otherApp = FirebaseApp.Create(otherAppConfig, "other");

Console.WriteLine(defaultApp.Name); // "[DEFAULT]"
Console.WriteLine(otherApp.Name); // "other"

// Use the shorthand notation to retrieve the default app's services
var defaultAuth = FirebaseAuth.DefaultInstance;

// Use the otherApp variable to retrieve the other app's services
var otherAuth = FirebaseAuth.GetAuth(otherApp);

Menetapkan cakupan untuk Realtime Database dan Authentication

Jika Anda menggunakan VM Google Compute Engine dengan Kredensial Default Aplikasi Google untuk Realtime Database atau Authentication, pastikan Anda juga menetapkan cakupan akses yang tepat. Untuk Realtime Database dan Authentication, Anda memerlukan cakupan yang diakhiri dengan userinfo.email dan cloud-platform atau firebase.database. Untuk memeriksa cakupan akses yang ada dan mengubahnya, jalankan perintah berikut menggunakan gcloud.

gcloud

# Check the existing access scopes
gcloud compute instances describe [INSTANCE_NAME] --format json

# The above command returns the service account information. For example:
  "serviceAccounts": [
   {
    "email": "your.gserviceaccount.com",
    "scopes": [
     "https://www.googleapis.com/auth/cloud-platform",
     "https://www.googleapis.com/auth/userinfo.email"
     ]
    }
  ],

# Stop the VM, then run the following command, using the service account
# that gcloud returned when you checked the scopes.

gcloud compute instances set-service-account [INSTANCE_NAME] --service-account "your.gserviceaccount.com" --scopes "https://www.googleapis.com/auth/firebase.database,https://www.googleapis.com/auth/userinfo.email"

Menguji dengan kredensial pengguna akhir gcloud

Saat menguji Admin SDK secara lokal dengan Kredensial Default Aplikasi Google yang diperoleh dengan menjalankan gcloud auth application-default login, diperlukan perubahan tambahan untuk menggunakan Firebase Authentication karena hal berikut:

  • Firebase Authentication tidak menerima kredensial pengguna akhir gcloud yang dihasilkan menggunakan client ID OAuth gcloud.
  • Firebase Authentication memerlukan project ID agar diberikan saat melakukan inisialisasi untuk jenis kredensial pengguna akhir ini.

Sebagai solusinya, Anda dapat membuat Kredensial Default Aplikasi Google di gcloud menggunakan client ID OAuth 2.0 Anda sendiri. Client ID OAuth harus berupa jenis aplikasi aplikasi Desktop.

gcloud

gcloud auth application-default login --client-id-file=[/path/to/client/id/file]

Anda dapat menentukan project ID secara eksplisit saat inisialisasi aplikasi atau cukup dengan menggunakan variabel lingkungan GOOGLE_CLOUD_PROJECT. Tidak diperlukan perubahan tambahan untuk menguji kode Anda jika Anda menggunakan variabel lingkungan ini.

Untuk menentukan project ID secara eksplisit:

Node.js

import { initializeApp, applicationDefault } from 'firebase-admin/app';

initializeApp({
  credential: applicationDefault(),
  projectId: '<FIREBASE_PROJECT_ID>',
});

Java

FirebaseOptions options = FirebaseOptions.builder()
    .setCredentials(GoogleCredentials.getApplicationDefault())
    .setProjectId("<FIREBASE_PROJECT_ID>")
    .build();

FirebaseApp.initializeApp(options);

Python

app_options = {'projectId': '<FIREBASE_PROJECT_ID>'}
default_app = firebase_admin.initialize_app(options=app_options)

Go

config := &firebase.Config{ProjectID: "<FIREBASE_PROJECT_ID>"}
app, err := firebase.NewApp(context.Background(), config)
if err != nil {
        log.Fatalf("error initializing app: %v\n", err)
}

C#

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.GetApplicationDefault(),
    ProjectId = "<FIREBASE_PROJECT_ID>",
});

Langkah berikutnya

Mempelajari Firebase:

Menambahkan fitur Firebase ke aplikasi Anda: