Thêm SDK quản trị Firebase vào máy chủ của bạn

SDK quản trị là một tập hợp các thư viện máy chủ cho phép bạn tương tác với Firebase từ môi trường đặc quyền để thực hiện các hành động như:

  • Đọc và ghi dữ liệu Cơ sở dữ liệu thời gian thực với toàn quyền quản trị viên.
  • Gửi tin nhắn Nhắn tin qua đám mây Firebase theo chương trình bằng cách sử dụng cách tiếp cận đơn giản, thay thế cho các giao thức máy chủ Nhắn tin qua đám mây Firebase.
  • Tạo và xác minh mã thông báo xác thực Firebase.
  • Truy cập các tài nguyên của Google Cloud như nhóm Cloud Storage và cơ sở dữ liệu Cloud Firestore được liên kết với các dự án Firebase của bạn.
  • Tạo bảng điều khiển dành cho quản trị viên được đơn giản hóa của riêng bạn để thực hiện những việc như tra cứu dữ liệu người dùng hoặc thay đổi địa chỉ email của người dùng để xác thực.

Nếu bạn quan tâm đến việc sử dụng SDK Node.js làm ứng dụng khách để người dùng cuối truy cập (ví dụ: trong máy tính để bàn Node.js hoặc ứng dụng IoT), trái ngược với quyền truy cập của quản trị viên từ môi trường đặc quyền (như máy chủ), bạn thay vào đó nên làm theo hướng dẫn để thiết lập SDK JavaScript của máy khách .

Đây là ma trận tính năng hiển thị những tính năng Firebase được hỗ trợ ở mỗi ngôn ngữ:

Tính năng Node.js Java Python Đi C#
Đào mã thông báo tùy chỉnh
Xác minh mã thông báo ID
Quản lý người dùng
Kiểm soát quyền truy cập bằng xác nhận quyền sở hữu tùy chỉnh
Thu hồi mã thông báo làm mới
Nhập người dùng
Quản lý cookie phiên
Tạo liên kết hành động email
Quản lý cấu hình nhà cung cấp SAML/OIDC
Hỗ trợ nhiều người thuê nhà
Cơ sở dữ liệu thời gian thực *
Nhắn tin qua đám mây Firebase
FCM đa phương tiện
Quản lý đăng ký chủ đề FCM
Lưu trữ đám mây
Cửa hàng đám mây
Quản lý dự án
Quy tắc bảo mật
Quản lý mô hình ML
Cấu hình từ xa Firebase
Kiểm tra ứng dụng Firebase
Tiện ích mở rộng Firebase

Để tìm hiểu thêm về tích hợp SDK quản trị cho những mục đích sử dụng này, hãy xem tài liệu Cơ sở dữ liệu thời gian thực , FCM , Xác thực , Cấu hình từ xaLưu trữ đám mây tương ứng. Phần còn lại của trang này tập trung vào thiết lập cơ bản cho SDK quản trị.

Điều kiện tiên quyết

  • Đảm bảo rằng bạn có ứng dụng máy chủ.

  • Đảm bảo rằng máy chủ của bạn chạy như sau tùy thuộc vào SDK quản trị mà bạn sử dụng:

    • SDK Node.js dành cho quản trị viên — Node.js 14+ (khuyên dùng Node.js 16+)
      Hỗ trợ Node.js 14 không được dùng nữa.
    • SDK Java dành cho quản trị viên — Java 8+
    • SDK Python dành cho quản trị viên — Python 3.7+ (khuyên dùng Python 3.8+)
      Hỗ trợ Python 3.7 không được dùng nữa.
    • SDK quản trị Go — Go 1.17+
    • Quản trị viên .NET SDK — .NET Framework 4.6.1+ hoặc .NET Standard 2.0 cho .Net Core 2.0+

Thiết lập tài khoản dịch vụ và dự án Firebase

Để sử dụng SDK quản trị Firebase, bạn cần có những thứ sau:

  • Một dự án Firebase.
  • Tài khoản dịch vụ SDK quản trị Firebase để liên lạc với Firebase. Tài khoản dịch vụ này được tạo tự động khi bạn tạo dự án Firebase hoặc thêm Firebase vào dự án Google Cloud.
  • Tệp cấu hình có thông tin xác thực tài khoản dịch vụ của bạn.

Nếu chưa có dự án Firebase, bạn cần tạo một dự án trong bảng điều khiển Firebase . Truy cập Tìm hiểu dự án Firebase để tìm hiểu thêm về các dự án Firebase.

Thêm SDK

Nếu bạn đang thiết lập một dự án mới, bạn cần cài đặt SDK cho ngôn ngữ bạn chọn.

Node.js

SDK Node.js quản trị Firebase có sẵn vào npm. Nếu bạn chưa có tệp package.json , hãy tạo một tệp thông qua npm init . Tiếp theo, cài đặt gói npm firebase-admin và lưu nó vào package.json :

npm install firebase-admin --save

Để sử dụng mô-đun trong ứng dụng của bạn, require nó từ bất kỳ tệp JavaScript nào:

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

Nếu bạn đang sử dụng ES2015, bạn có thể import mô-đun:

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

Java

SDK Java quản trị Firebase được xuất bản lên kho lưu trữ trung tâm Maven. Để cài đặt thư viện, hãy khai báo nó dưới dạng phần phụ thuộc trong tệp build.gradle của bạn:

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

Nếu bạn sử dụng Maven để xây dựng ứng dụng của mình, bạn có thể thêm phần phụ thuộc sau vào pom.xml :

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

Python

SDK Python quản trị Firebase có sẵn thông qua pip . Bạn có thể cài đặt thư viện cho tất cả người dùng thông qua sudo :

sudo pip install firebase-admin

Hoặc, bạn có thể cài đặt thư viện cho người dùng hiện tại bằng cách chuyển --user cờ:

pip install --user firebase-admin

Đi

SDK quản trị Go có thể được cài đặt bằng tiện ích go install :

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

# Or install a specific version:
go install firebase.google.com/go/v4@4.13.0

C#

SDK quản trị .NET có thể được cài đặt bằng trình quản lý gói .NET:

Install-Package FirebaseAdmin -Version 2.4.0

Ngoài ra, hãy cài đặt nó bằng tiện ích dòng lệnh dotnet :

dotnet add package FirebaseAdmin --version 2.4.0

Hoặc, bạn có thể cài đặt nó bằng cách thêm mục tham chiếu gói sau vào tệp .csproj của mình:

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

Khởi tạo SDK

Sau khi tạo dự án Firebase, bạn có thể khởi chạy SDK bằng Thông tin xác thực mặc định của ứng dụng Google . Vì việc tra cứu thông tin đăng nhập mặc định hoàn toàn tự động trong môi trường Google, không cần cung cấp biến môi trường hoặc cấu hình khác, nên cách khởi tạo SDK này được khuyến nghị đặc biệt cho các ứng dụng chạy trong môi trường Google như Cloud Run, App Engine và Cloud Functions.

Để tùy ý chỉ định các tùy chọn khởi tạo cho các dịch vụ như Cơ sở dữ liệu thời gian thực, Lưu trữ đám mây hoặc Chức năng đám mây, hãy sử dụng biến môi trường FIREBASE_CONFIG . Nếu nội dung của biến FIREBASE_CONFIG bắt đầu bằng { thì nó sẽ được phân tích cú pháp dưới dạng đối tượng JSON. Mặt khác, SDK giả định rằng chuỗi đó là đường dẫn của tệp JSON chứa các tùy chọn.

Node.js

const app = initializeApp();

Java

FirebaseApp.initializeApp();

Python

default_app = firebase_admin.initialize_app()

Đi

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

C#

FirebaseApp.Create();

Sau khi khởi tạo, bạn có thể sử dụng SDK quản trị để hoàn thành các loại tác vụ sau:

Sử dụng mã thông báo làm mới OAuth 2.0

SDK quản trị cũng cung cấp thông tin xác thực cho phép bạn xác thực bằng mã thông báo làm mới 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)

Đi

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

Khởi tạo SDK trong môi trường không phải của Google

Nếu bạn đang làm việc trong môi trường máy chủ không phải của Google, trong đó việc tra cứu thông tin xác thực mặc định không thể hoàn toàn tự động, bạn có thể khởi chạy SDK bằng tệp khóa tài khoản dịch vụ đã xuất.

Các dự án Firebase hỗ trợ các tài khoản dịch vụ của Google mà bạn có thể sử dụng để gọi API máy chủ Firebase từ máy chủ ứng dụng hoặc môi trường đáng tin cậy của mình. Nếu bạn đang phát triển mã cục bộ hoặc triển khai ứng dụng của mình tại chỗ, bạn có thể sử dụng thông tin xác thực có được thông qua tài khoản dịch vụ này để ủy quyền các yêu cầu máy chủ.

Để xác thực tài khoản dịch vụ và ủy quyền cho tài khoản đó truy cập các dịch vụ Firebase, bạn phải tạo tệp khóa riêng ở định dạng JSON.

Để tạo tệp khóa riêng cho tài khoản dịch vụ của bạn:

  1. Trong bảng điều khiển Firebase, hãy mở Cài đặt > Tài khoản dịch vụ .

  2. Nhấp vào Tạo khóa riêng mới , sau đó xác nhận bằng cách nhấp vào Tạo khóa .

  3. Lưu trữ an toàn tệp JSON chứa khóa.

Khi ủy quyền thông qua tài khoản dịch vụ, bạn có hai lựa chọn để cung cấp thông tin xác thực cho ứng dụng của mình. Bạn có thể đặt biến môi trường GOOGLE_APPLICATION_CREDENTIALS hoặc bạn có thể chuyển đường dẫn đến khóa tài khoản dịch vụ một cách rõ ràng trong mã. Tùy chọn đầu tiên an toàn hơn và được khuyến khích sử dụng.

Để đặt biến môi trường:

Đặt biến môi trường GOOGLE_APPLICATION_CREDENTIALS thành đường dẫn tệp của tệp JSON chứa khóa tài khoản dịch vụ của bạn. Biến này chỉ áp dụng cho phiên shell hiện tại của bạn, vì vậy nếu bạn mở một phiên mới, hãy đặt lại biến.

Linux hoặc macOS

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

các cửa sổ

Với PowerShell:

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

Sau khi bạn hoàn thành các bước trên, Thông tin xác thực mặc định của ứng dụng (ADC) có thể ngầm xác định thông tin xác thực của bạn, cho phép bạn sử dụng thông tin xác thực tài khoản dịch vụ khi thử nghiệm hoặc chạy trong môi trường không phải của Google.

Khởi tạo SDK như được hiển thị:

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

Đi

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

Khởi tạo nhiều ứng dụng

Trong hầu hết các trường hợp, bạn chỉ phải khởi chạy một ứng dụng mặc định duy nhất. Bạn có thể truy cập các dịch vụ của ứng dụng đó theo hai cách tương đương:

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

Đi

// 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;

Một số trường hợp sử dụng yêu cầu bạn tạo nhiều ứng dụng cùng một lúc. Ví dụ: bạn có thể muốn đọc dữ liệu từ Cơ sở dữ liệu thời gian thực của một dự án Firebase và tạo mã thông báo tùy chỉnh cho một dự án khác. Hoặc bạn có thể muốn xác thực hai ứng dụng bằng thông tin xác thực riêng biệt. SDK Firebase cho phép bạn tạo nhiều ứng dụng cùng lúc, mỗi ứng dụng có thông tin cấu hình riêng.

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)

Đi

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

Đặt phạm vi cho Cơ sở dữ liệu và xác thực thời gian thực

Nếu bạn đang sử dụng máy ảo Google Computer Engine có Thông tin xác thực mặc định của ứng dụng Google cho Cơ sở dữ liệu thời gian thực hoặc Xác thực, hãy đảm bảo cũng đặt phạm vi truy cập phù hợp . Đối với Xác thực và Cơ sở dữ liệu thời gian thực, bạn cần có phạm vi kết thúc bằng userinfo.emailcloud-platform hoặc firebase.database . Để kiểm tra phạm vi truy cập hiện có và thay đổi chúng, hãy chạy các lệnh sau bằng 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"

Kiểm tra bằng thông tin đăng nhập của người dùng cuối gcloud

Khi thử nghiệm SDK quản trị cục bộ bằng Thông tin xác thực mặc định của ứng dụng Google có được bằng cách chạy gcloud auth application-default login , cần có các thay đổi bổ sung để sử dụng Xác thực Firebase do những điều sau:

  • Xác thực Firebase không chấp nhận thông tin đăng nhập của người dùng cuối gcloud được tạo bằng ID khách hàng gcloud OAuth.
  • Xác thực Firebase yêu cầu phải cung cấp ID dự án khi khởi tạo cho các loại thông tin xác thực người dùng cuối này.

Để khắc phục, bạn có thể tạo Thông tin xác thực mặc định của ứng dụng Google trong gcloud bằng ID ứng dụng khách OAuth 2.0 của riêng bạn. ID ứng dụng khách OAuth phải là loại ứng dụng dành cho máy tính để bàn .

gcloud

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

Bạn có thể chỉ định rõ ràng ID dự án khi khởi tạo ứng dụng hoặc chỉ sử dụng biến môi trường GOOGLE_CLOUD_PROJECT . Cách thứ hai tránh phải thực hiện bất kỳ thay đổi bổ sung nào để kiểm tra mã của bạn.

Để chỉ định rõ ràng ID dự án:

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)

Đi

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

Bước tiếp theo

Tìm hiểu về Firebase:

Thêm các tính năng của Firebase vào ứng dụng của bạn: