Buka konsol

Menambahkan Firebase Admin SDK ke Server

Admin SDK dapat Anda gunakan untuk berinteraksi dengan Firebase dari lingkungan istimewa untuk melakukan berbagai tindakan seperti:

  • Membaca dan menulis data Realtime Database dengan hak istimewa admin penuh.
  • Mengirim pesan Firebase Cloud Messaging secara terprogram dengan menggunakan pendekatan alternatif yang sederhana ke protokol server FCM.
  • Membuat dan memverifikasi token autentikasi Firebase.
  • Mengakses resource Google Cloud Platform seperti bucket Cloud Storage dan database Firestore yang terkait dengan project Firebase Anda.
  • Membuat konsol admin sederhana untuk melakukan berbagai 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 desktop Node.js atau aplikasi IoT), bukan untuk akses admin dari lingkungan istimewa (seperti server), Anda harus mengikuti 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 Khusus
Verifikasi Token ID
Pengelolaan Pengguna
Kontrol Akses dengan Klaim Kustom
Pencabutan Token Refresh
Mengimpor Pengguna
Pengelolaan Cookie Sesi
Membuat Link Tindakan Email
Mengelola konfigurasi penyedia SAML/OIDC
Realtime Database *
Firebase Cloud Messaging
FCM Multicast
Mengelola Langganan Topik FCM
Cloud Storage
Cloud Firestore
Pengelolaan Proyek

Untuk mempelajari lebih lanjut integrasi Admin SDK untuk penggunaan ini, baca dokumentasi Realtime Database, FCM, Authentication, dan Cloud Storage. Bagian selanjutnya dari halaman ini berfokus pada penyiapan dasar untuk Admin SDK.

Prasyarat

Sebelum memulai, pastikan Anda memiliki hal-hal berikut:

  • Jika menggunakan Admin Node.js SDK, server yang menjalankan Node.js 6+ (dukungan Node 6 kini sudah tidak digunakan lagi, dan developer direkomendasikan untuk menggunakan Node 8+).
  • Jika menggunakan Admin Java SDK, server yang menjalankan Java 7+ (dukungan Java 7 kini sudah tidak digunakan lagi, dan developer direkomendasikan untuk menggunakan Java 8+).
  • Jika menggunakan Admin Python SDK, server yang menjalankan Python 2.7 atau 3.4+ (dukungan Python 2 sekarang kini digunakan lagi, dan developer direkomendasikan untuk menggunakan Python 3.4+).
  • Jika menggunakan Admin Go SDK, server yang menjalankan Go 1.9+.
  • Jika menggunakan Admin .NET SDK, server yang menjalankan .NET Framework 4.5+ atau .Net Core 1.5+.
  • Aplikasi server.

Menambahkan Firebase ke aplikasi

Untuk menggunakan Firebase Admin SDK, Anda memerlukan project Firebase, akun layanan untuk berkomunikasi dengan layanan Firebase, dan file konfigurasi dengan kredensial akun layanan Anda. Jika Anda belum memiliki project Firebase, buat di Firebase console. Dialog Tambahkan project juga memberi Anda opsi untuk menambahkan Firebase ke project Google Cloud Platform yang sudah ada.

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, buatlah melalui npm init. Selanjutnya, instal paket npm firebase-admin dan simpan ke package.json Anda:

$ npm install firebase-admin --save

Untuk menggunakan modul di aplikasi, require dari file JavaScript mana pun:

var admin = require('firebase-admin');

Jika menggunakan ES2015, Anda dapat import modul sebagai gantinya:

import * as admin from 'firebase-admin';

Java

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

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

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

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

Python

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

$ sudo pip install firebase-admin

Atau, Anda dapat menginstal library untuk pengguna saat ini saja dengan meneruskan tanda --user:

$ pip install --user firebase-admin

Go

Go Admin SDK dapat diinstal menggunakan utilitas go get:

$ go get firebase.google.com/go

C#

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

$ Install-Package FirebaseAdmin -Version 1.4.0

Atau, instal menggunakan utilitas command-line dotnet:

$ dotnet add package FirebaseAdmin --version 1.4.0

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

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

Menginisialisasi SDK

Setelah membuat project Firebase, Anda dapat menginisialisasi SDK dengan strategi otorisasi yang menggabungkan file akun layanan Anda dengan Kredensial Default Aplikasi Google.

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 menerapkan aplikasi di lokasi lokal, Anda dapat menggunakan kredensial yang diperoleh melalui akun layanan ini untuk mengotorisasi 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 Setelan > Akun Layanan.

  2. Klik Buat Kunci Pribadi Baru, lalu konfirmasikan dengan mengklik Buat Kunci.

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

Saat mengotorisasi melalui akun layanan, Anda diberikan dua pilihan untuk memberikan kredensial ke aplikasi. Anda dapat menetapkan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS, atau secara eksplisit meneruskan lokasi ke kunci akun layanan dalam kode. Opsi pertama lebih aman dan sangat disarankan.

Untuk menyetel variabel lingkungan:

Setel variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS ke lokasi 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 lagi.

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 Anda sehingga Anda dapat menggunakan kredensial akun layanan saat menguji atau menjalankan di lingkungan non-Google.

Inisialisasi SDK seperti yang ditunjukkan:

Node.js

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

Java

FirebaseOptions options = new 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(),
});

Menggunakan token refresh OAuth 2.0

Admin SDK juga memberikan kredensial, sehingga Anda dapat melakukan autentikasi dengan token refresh Google OAuth2:

Node.js

var refreshToken; // Get refresh token from OAuth2 flow

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

Java

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

FirebaseOptions options = new 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"),
});

Melakukan inisialisasi tanpa parameter

SDK juga dapat diinisialisasi tanpa parameter. Dalam hal ini, SDK menggunakan Kredensial Default Aplikasi Google dan membaca opsi dari variabel lingkungan FIREBASE_CONFIG. Jika isi variabel FIREBASE_CONFIG dimulai dengan {, variabel ini akan diurai sebagai objek JSON. Jika tidak, SDK akan menganggap bahwa string tersebut adalah nama file JSON yang berisi opsi.

Node.js

// Initialize the default app
var admin = require('firebase-admin');
var app = admin.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 SDK diinisialisasi, Anda dapat menggunakan Firebase Admin SDK untuk menyelesaikan jenis tugas berikut:

Menginisialisasi beberapa aplikasi

Dalam sebagian besar kasus, Anda hanya perlu menginisialisasi 1 aplikasi default. Anda dapat mengakses layanan di luar aplikasi tersebut dengan 2 cara yang setara:

Node.js

// Initialize the default app
var defaultApp = admin.initializeApp(defaultAppConfig);

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

// Retrieve services via the defaultApp variable...
var defaultAuth = defaultApp.auth();
var defaultDatabase = defaultApp.database();

// ... or use the equivalent shorthand notation
defaultAuth = admin.auth();
defaultDatabase = admin.database();

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 pada 1 project Firebase dan membuat token kustom untuk project lain. Atau, Anda mungkin ingin mengautentikasi 2 aplikasi dengan kredensial terpisah. Firebase SDK memungkinkan Anda membuat beberapa aplikasi secara bersamaan, masing-masing dengan informasi konfigurasinya sendiri.

Node.js

// Initialize the default app
admin.initializeApp(defaultAppConfig);

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

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

// Use the shorthand notation to retrieve the default app's services
var defaultAuth = admin.auth();
var defaultDatabase = admin.database();

// Use the otherApp variable to retrieve the other app's services
var otherAuth = otherApp.auth();
var otherDatabase = otherApp.database();

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 Google Compute Engine VM 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 dengan akhiran 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"

Langkah berikutnya

Mempelajari Firebase:

Menambahkan fitur Firebase ke aplikasi Anda: