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
Realtime Database *
Cloud Messaging
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.0+
  • Jika menggunakan Admin Java SDK, server yang menjalankan Java 7+
  • Jika menggunakan Admin Python SDK, server yang menjalankan Python 2.7+ atau 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 Anda

Untuk menggunakan Firebase Admin SDK, Anda memerlukan project Firebase, akun layanan untuk berkomunikasi dengan layanan Firebase, dan file konfigurasi dengan kredensial akun layanan Anda.

  1. 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.
  2. Buka tab Akun Layanan di halaman penyiapan project Anda.
  3. Klik tombol Buat Kunci Pribadi Baru di bagian bawah Firebase Admin SDK pada tab Akun Layanan.

Setelah mengklik tombol tersebut, file JSON yang berisi kredensial akun layanan Anda akan didownload. Anda memerlukan kredensial ini untuk menginisialisasi SDK di langkah berikutnya.

File ini hanya dihasilkan satu kali. Jika kehilangan atau membocorkan kunci ini, Anda dapat mengulang petunjuk di atas guna membuat kunci JSON yang baru untuk akun layanan.

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.7.0'
}

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.7.0</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.0.0

Atau, instal menggunakan utilitas command-line dotnet:

$ dotnet add package FirebaseAdmin --version 1.0.0

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

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

Menginisialisasi SDK

Setelah membuat project Firebase console dan mendownload file JSON dengan kredensial akun layanan, Anda bisa menginisialisasi SDK dengan cuplikan kode ini:

Node.js

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

var serviceAccount = require('path/to/serviceAccountKey.json');

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

Java

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

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

FirebaseApp.initializeApp(options);

Python

import firebase_admin
from firebase_admin import credentials

cred = credentials.Certificate('path/to/serviceAccountKey.json')
default_app = firebase_admin.initialize_app(cred)

Untuk menggunakan Admin SDK Python di lingkungan standar Google App Engine, Anda memerlukan beberapa konfigurasi tambahan.

Go

import (
	"context"
	"log"

	firebase "firebase.google.com/go"
	"firebase.google.com/go/auth"
	"google.golang.org/api/option"
)

opt := option.WithCredentialsFile("path/to/serviceAccountKey.json")
app, err := firebase.NewApp(context.Background(), nil, opt)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

C#

using FirebaseAdmin;
using FirebaseAdmin.Auth;
using Google.Apis.Auth.OAuth2;


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

Anda dapat menemukan nama database di halaman Database pada project Firebase console.

Jika file akun layanan tidak dapat direferensikan, Admin Node.js SDK dapat menerima inline masing-masing kolom akun layanan:

Node.js

admin.initializeApp({
  credential: admin.credential.cert({
    projectId: '<PROJECT_ID>',
    clientEmail: 'foo@<PROJECT_ID>.iam.gserviceaccount.com',
    privateKey: '-----BEGIN PRIVATE KEY-----\n<KEY>\n-----END PRIVATE KEY-----\n'
  }),
  databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
});

Admin SDK juga dapat diautentikasi dengan jenis kredensial berbeda. Misalnya, jika menjalankan kode dalam Google Cloud Platform, Anda dapat menggunakan Kredensial Default Aplikasi Google agar Admin SDK mengambil akun layanan atas nama Anda secara otomatis:

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(),
});

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"

Admin SDK juga memberikan kredensial yang memungkinkan Anda untuk 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"),
});

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();

Anda kini siap menggunakan Firebase Admin SDK untuk menyelesaikan 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);

Langkah berikutnya

Mempelajari Firebase:

Menambahkan fitur Firebase ke aplikasi Anda:

Kirim masukan tentang...

Butuh bantuan? Kunjungi halaman dukungan kami.