Catch up on highlights from Firebase at Google I/O 2023. Learn more

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

SDK dành cho quản trị viên là một bộ thư viện máy chủ cho phép bạn tương tác với Firebase từ các 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 đầy đủ quyền quản trị.
  • 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 phương pháp đơ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 tài nguyên Google Cloud như bộ chứa Cloud Storage và cơ sở dữ liệu Cloud Firestore được liên kết với dự án Firebase của bạn.
  • Tạo bảng điều khiển dành cho quản trị viên đơ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 ứng dụng IoT hoặc máy tính để bàn Node.js), 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 ứng dụng khách .

Đây là một ma trận tính năng cho biết những tính năng nào của Firebase được hỗ trợ trong mỗi ngôn ngữ:

Tính năng Node.js Java con trăn Đi C#
Đúc 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 với các yêu cầu tùy chỉnh
Làm mới việc thu hồi mã thông báo
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
Phát đa hướng FCM
Quản lý đăng ký chủ đề FCM
Lưu trữ đám mây
Cửa hàng lửa trên đá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 căn cứ hỏa lực

Để tìm hiểu thêm về tích hợp SDK dành cho quản trị viên 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+
    • SDK Java dành cho quản trị viên — Java 8+
    • SDK Python dành cho quản trị viên — Python 3.6+ (khuyên dùng Python 3.7+)
    • SDK Go dành cho quản trị viên — Go 1.15+
    • SDK .NET dành cho quản trị viên — .NET Framework 4.6.1+ hoặc .NET Standard 2.0 dành cho .Net Core 2.0 trở lên

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 sẽ cần những thứ sau:

  • Một dự án Firebase.
  • Tài khoản dịch vụ SDK quản trị Firebase để giao tiếp 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 đăng nhập 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 các 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 dành cho quản trị viên Firebase khả dụng trên npm. Nếu bạn chưa có tệp package.json , hãy tạo một tệp qua npm init . Tiếp theo, cài đặt gói firebase-admin npm và lưu nó vào package.json của bạn:

npm install firebase-admin --save

Để sử dụng mô-đun trong ứng dụng của bạn, require mô-đun 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 dành cho quản trị viên 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.1.1'
}

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 của mình:

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

con trăn

SDK Python dành cho quản trị viên Firebase có sẵn 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 chỉ cho người dùng hiện tại bằng cách chuyển cờ --user :

pip install --user firebase-admin

Đi

Có thể cài đặt Go Admin SDK bằng tiện ích go get :

# Install as a module dependency
go get firebase.google.com/go/v4

# Install to $GOPATH
go get firebase.google.com/go

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.3.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.3.0

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

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

Khởi tạo SDK

Khi bạn đã 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 . Do tra cứu thông tin xác thực 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 khích mạnh mẽ cho các ứng dụng chạy trong môi trường Google như Cloud Run, App Engine và Cloud Function.

Để 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ội dung đó 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();

con trăn

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 được 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);

con trăn

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, thì 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ợ tài khoản dịch vụ 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 đăng nhập có được qua tài khoản dịch vụ này để ủy quyền cho các yêu cầu máy chủ.

Để xác thực tài khoản dịch vụ và cho phép 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 tư 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 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 rõ ràng đường dẫn đến khóa tài khoản dịch vụ trong mã. Tùy chọn đầu tiên an toàn hơn và được khuyến nghị mạnh mẽ.

Để đặ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 đăng nhập mặc định của ứng dụng (ADC) có thể xác định hoàn toàn thông tin đăng nhập của bạn, cho phép bạn sử dụng thông tin đăng nhập 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ư hình:

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

con trăn

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

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ụ ngoài ứ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();

con trăn

# 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à đúc 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);

con trăn

# 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 thời gian thực và Xác thực

Nếu bạn đang sử dụng Máy ảo Google Compute Engine với 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 đúng phạm vi truy cập . Đối với Xác thực và Cơ sở dữ liệu thời gian thực, bạn cần cá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 cách sử dụ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"

Thử nghiệm với thông tin đăng nhập của người dùng cuối gcloud

Khi kiểm tra 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 thu đượ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 ứng dụng khách OAuth của gcloud.
  • 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.

Như một giải pháp thay thế, 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 cách sử dụng ID ứng dụng khách OAuth 2.0 của riêng bạn. ID máy khách OAuth phải là loại ứng dụng Ứ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ái sau 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);

con trăn

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: