เพิ่ม Firebase Admin SDK ไปยังเซิร์ฟเวอร์ของคุณ

Admin SDK คือชุดของไลบรารีเซิร์ฟเวอร์ที่ให้คุณโต้ตอบกับ Firebase จากสภาพแวดล้อมที่มีสิทธิพิเศษเพื่อดำเนินการต่างๆ เช่น:

  • อ่านและเขียนข้อมูล Realtime Database พร้อมสิทธิ์ผู้ดูแลระบบเต็มรูปแบบ
  • ส่งข้อความ Firebase Cloud Messaging โดยทางโปรแกรมโดยใช้วิธีทางเลือกที่เรียบง่ายสำหรับโปรโตคอลเซิร์ฟเวอร์ Firebase Cloud Messaging
  • สร้างและยืนยันโทเค็นการตรวจสอบสิทธิ์ของ Firebase
  • เข้าถึงทรัพยากร Google Cloud เช่น ที่เก็บข้อมูล Cloud Storage และฐานข้อมูล Cloud Firestore ที่เชื่อมโยงกับโปรเจ็กต์ Firebase ของคุณ
  • สร้างคอนโซลผู้ดูแลระบบแบบง่ายของคุณเองเพื่อทำสิ่งต่างๆ เช่น ค้นหาข้อมูลผู้ใช้หรือเปลี่ยนที่อยู่อีเมลของผู้ใช้สำหรับการตรวจสอบสิทธิ์

หากคุณสนใจที่จะใช้ Node.js SDK เป็นไคลเอนต์สำหรับการเข้าถึงของผู้ใช้ปลายทาง (เช่น ในเดสก์ท็อป Node.js หรือแอปพลิเคชัน IoT) ซึ่งต่างจากการเข้าถึงของผู้ดูแลระบบจากสภาพแวดล้อมที่มีสิทธิพิเศษ (เช่น เซิร์ฟเวอร์) คุณ ควรปฏิบัติตาม คำแนะนำสำหรับการตั้งค่าของลูกค้า JavaScript SDK

นี่คือเมทริกซ์คุณลักษณะที่แสดงว่าคุณลักษณะของ Firebase รองรับในแต่ละภาษา

ลักษณะเฉพาะ Node.js Java Python ไป ค#
Custom Token Minting
การยืนยัน ID Token
การจัดการผู้ใช้
ควบคุมการเข้าถึงด้วยการอ้างสิทธิ์ที่กำหนดเอง
รีเฟรชการเพิกถอนโทเค็น
นำเข้าผู้ใช้
การจัดการคุกกี้ของเซสชัน
การสร้างลิงก์การดำเนินการอีเมล
การจัดการการกำหนดค่าผู้ให้บริการ SAML/OIDC
รองรับผู้เช่าหลายราย
ฐานข้อมูลเรียลไทม์ *
การส่งข้อความบนคลาวด์ของ Firebase
FCM Multicast
จัดการการสมัครหัวข้อ FCM
การจัดเก็บเมฆ
Cloud Firestore
การบริหารโครงการ
กฎความปลอดภัย
ML Model Management
การกำหนดค่าระยะไกลของ Firebase
ตรวจสอบแอป Firebase

ต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการรวม SDK ผู้ดูแลระบบสำหรับการใช้งานเหล่านี้ให้ดูที่สอดคล้อง ฐานข้อมูลเรียลไทม์ , FCM , รับรองความถูกต้อง , ระยะไกลการกำหนดค่า และ การจัดเก็บเมฆ เอกสาร ส่วนที่เหลือของหน้านี้เน้นที่การตั้งค่าพื้นฐานสำหรับ Admin SDK

ข้อกำหนดเบื้องต้น

  • ตรวจสอบให้แน่ใจว่าคุณมีแอปเซิร์ฟเวอร์

  • ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ของคุณเรียกใช้สิ่งต่อไปนี้โดยขึ้นอยู่กับ Admin SDK ที่คุณใช้:

    • ผู้ดูแลระบบ Node.js SDK — Node.js 10.13.0+
    • ผู้ดูแลระบบ Java SDK — Java 7+ (แนะนำ Java 8+)
      เลิกสนับสนุน Java 7 แล้ว
    • ผู้ดูแลระบบ Python SDK — Python 3.6+
    • ผู้ดูแลระบบ Go SDK — ไป 1.11+
    • ผู้ดูแลระบบ .NET SDK — .NET Framework 4.5+ หรือ .Net Core 1.5+

ตั้งค่าโปรเจ็กต์ Firebase และบัญชีบริการ

หากต้องการใช้ Firebase Admin SDK คุณจะต้องมีสิ่งต่อไปนี้:

  • โครงการ Firebase
  • บัญชีบริการเพื่อสื่อสารกับ Firebase
  • ไฟล์การกำหนดค่าที่มีข้อมูลประจำตัวของบัญชีบริการของคุณ

หากคุณไม่ได้มีโครงการ Firebase คุณต้องสร้างใน คอนโซล Firebase เยี่ยมชม เข้าใจ Firebase โครงการ เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับโครงการ Firebase

เพิ่ม SDK

หากคุณกำลังตั้งค่าโครงการใหม่ คุณต้องติดตั้ง SDK สำหรับภาษาที่คุณเลือก

Node.js

Firebase Admin Node.js SDK พร้อมใช้งานใน npm หากคุณไม่ได้มี package.json ไฟล์สร้างผ่าน npm init ถัดไปติดตั้ง firebase-admin แพคเกจ NPM และบันทึกไปยังคุณ package.json :

$ npm install firebase-admin --save

หากต้องการใช้โมดูลในการประยุกต์ใช้ของคุณ require ได้จากไฟล์จาวาสคริปต์ใด ๆ

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

หากคุณกำลังใช้ ES2015 คุณสามารถ import โมดูลแทน:

import * as admin from 'firebase-admin';

Java

Firebase Admin Java SDK ได้รับการเผยแพร่ไปยังที่เก็บส่วนกลางของ Maven การติดตั้งห้องสมุดประกาศเป็นพึ่งพาของคุณใน build.gradle ไฟล์:

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

ถ้าคุณใช้ Maven ในการสร้างแอพลิเคชันของคุณคุณสามารถเพิ่มการพึ่งพาต่อไปนี้เพื่อคุณ pom.xml :

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

Python

Firebase ธุรการหลาม SDK สามารถใช้ได้ผ่านทาง pip คุณสามารถติดตั้งห้องสมุดสำหรับผู้ใช้ทั้งหมดผ่านทาง sudo :

$ sudo pip install firebase-admin

หรือคุณสามารถติดตั้งห้องสมุดเพียงผู้ใช้ปัจจุบันโดยผ่าน --user ธง:

$ pip install --user firebase-admin

ไป

The Go SDK ผู้ดูแลระบบสามารถติดตั้งใช้ go get ยูทิลิตี้:

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

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

ค#

สามารถติดตั้ง .NET Admin SDK ได้โดยใช้ตัวจัดการแพ็คเกจ .NET:

$ Install-Package FirebaseAdmin -Version 2.2.0

อีกวิธีหนึ่งคือการติดตั้งโดยใช้ dotnet อรรถประโยชน์บรรทัดคำสั่ง:

$ dotnet add package FirebaseAdmin --version 2.2.0

หรือคุณสามารถติดตั้งได้โดยการเพิ่มรายการอ้างอิงแพคเกจต่อไปนี้ของคุณ .csproj ไฟล์:

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

เริ่มต้น SDK

เมื่อคุณได้สร้างโครงการ Firebase คุณสามารถเริ่มต้น SDK กับกลยุทธ์การอนุมัติที่รวมไฟล์บัญชีผู้ใช้บริการของคุณร่วมกับ Google เริ่มต้นการประยุกต์ใช้ข้อมูลประจำตัว

โครงการ Firebase สนับสนุน Google บัญชีบริการ ซึ่งคุณสามารถใช้เพื่อเรียก Firebase APIs เซิร์ฟเวอร์จากเซิร์ฟเวอร์ของแอปหรือสภาพแวดล้อมที่เชื่อถือได้ หากคุณกำลังพัฒนาโค้ดในเครื่องหรือปรับใช้แอปพลิเคชันภายในองค์กร คุณสามารถใช้ข้อมูลรับรองที่ได้รับผ่านบัญชีบริการนี้เพื่ออนุมัติคำขอของเซิร์ฟเวอร์

หากต้องการตรวจสอบสิทธิ์บัญชีบริการและอนุญาตให้เข้าถึงบริการ Firebase คุณต้องสร้างไฟล์คีย์ส่วนตัวในรูปแบบ JSON

ในการสร้างไฟล์คีย์ส่วนตัวสำหรับบัญชีบริการของคุณ:

  1. ใน Firebase คอนโซลเปิดการตั้งค่า> บริการบัญชี

  2. คลิกสร้างคีย์ส่วนตัวใหม่แล้วยืนยันโดยการคลิกที่สร้างคีย์

  3. จัดเก็บไฟล์ JSON ที่มีคีย์อย่างปลอดภัย

เมื่อให้สิทธิ์ผ่านบัญชีบริการ คุณมีสองทางเลือกในการให้ข้อมูลประจำตัวแก่แอปพลิเคชันของคุณ คุณสามารถตั้งค่า GOOGLE_APPLICATION_CREDENTIALS ตัวแปรสภาพแวดล้อมหรือคุณอย่างชัดเจนสามารถผ่านเส้นทางไปยังบัญชีผู้ใช้บริการที่สำคัญในรหัส ตัวเลือกแรกมีความปลอดภัยมากกว่าและขอแนะนำอย่างยิ่ง

การตั้งค่าตัวแปรสภาพแวดล้อม:

ตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS ไปยังเส้นทางแฟ้มของแฟ้ม JSON ที่มีคีย์บัญชีผู้ใช้บริการของคุณ ตัวแปรนี้ใช้กับเชลล์เซสชันปัจจุบันของคุณเท่านั้น ดังนั้นหากคุณเปิดเซสชันใหม่ ให้ตั้งค่าตัวแปรอีกครั้ง

Linux หรือ macOS

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

Windows

ด้วย PowerShell:

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

หลังจากที่คุณทำตามขั้นตอนข้างต้นเสร็จสิ้นแล้ว Application Default Credentials (ADC) จะสามารถระบุข้อมูลรับรองของคุณโดยปริยาย ซึ่งช่วยให้คุณใช้ข้อมูลรับรองของบัญชีบริการเมื่อทำการทดสอบหรือใช้งานในสภาพแวดล้อมที่ไม่ใช่ของ Google

เริ่มต้น SDK ตามที่แสดง:

Node.js

admin.initializeApp({
    credential: admin.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()

ไป

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

ค#

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.GetApplicationDefault(),
});

การใช้โทเค็นการรีเฟรช OAuth 2.0

SDK ผู้ดูแลระบบนอกจากนี้ยังมีข้อมูลประจำตัวที่ช่วยให้คุณสามารถตรวจสอบกับที่ Google OAuth2 รีเฟรชโทเค็น:

Node.js

const 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 = 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)

ไป

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

ค#

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

เริ่มต้นโดยไม่มีพารามิเตอร์

SDK สามารถเริ่มต้นได้โดยไม่มีพารามิเตอร์ ในกรณีนี้ SDK ใช้ Google เริ่มต้นการประยุกต์ใช้ข้อมูลประจำตัว เนื่องจากการค้นหาข้อมูลรับรองเริ่มต้นเป็นแบบอัตโนมัติทั้งหมดในสภาพแวดล้อมของ Google โดยไม่จำเป็นต้องระบุตัวแปรสภาพแวดล้อมหรือการกำหนดค่าอื่นๆ เราจึงขอแนะนำวิธีการทำให้ SDK เป็นค่าเริ่มต้นนี้สำหรับแอปพลิเคชันที่ทำงานบน Compute Engine, Kubernetes Engine, App Engine และ Cloud Function

การเลือกที่จะระบุตัวเลือกสำหรับการเริ่มต้นการให้บริการเช่นเรียลไทม์ฐานข้อมูลการจัดเก็บเมฆหรือฟังก์ชั่นคลาวด์ใช้ FIREBASE_CONFIG ตัวแปรสภาพแวดล้อม ถ้าเนื้อหาของ FIREBASE_CONFIG ตัวแปรเริ่มต้นด้วย { มันจะถูกแยกเป็นวัตถุ JSON มิฉะนั้น SDK จะถือว่าสตริงนั้นเป็นพาธของไฟล์ JSON ที่มีตัวเลือก

Node.js

const app = admin.initializeApp();

Java

FirebaseApp.initializeApp();

Python

default_app = firebase_admin.initialize_app()

ไป

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

ค#

FirebaseApp.Create();

เมื่อเริ่มต้นแล้ว คุณสามารถใช้ Admin SDK เพื่อทำงานประเภทต่อไปนี้ให้สำเร็จ:

เริ่มต้นหลายแอพ

ในกรณีส่วนใหญ่ คุณจะต้องเริ่มต้นแอปเริ่มต้นเพียงแอปเดียว คุณสามารถเข้าถึงบริการต่างๆ จากแอปนั้นได้สองวิธีที่เทียบเท่ากัน:

Node.js

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

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

// Retrieve services via the defaultApp variable...
let defaultAuth = defaultApp.auth();
let 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(...)

ไป

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

ค#

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

กรณีการใช้งานบางอย่างต้องการให้คุณสร้างหลายแอพพร้อมกัน ตัวอย่างเช่น คุณอาจต้องการอ่านข้อมูลจาก Realtime Database ของโปรเจ็กต์ Firebase หนึ่งโปรเจ็กต์ และ Mint โทเค็นที่กำหนดเองสำหรับโปรเจ็กต์อื่น หรือคุณอาจต้องการตรวจสอบสิทธิ์สองแอปด้วยข้อมูลประจำตัวที่แยกจากกัน Firebase SDK ช่วยให้คุณสร้างหลายแอปได้พร้อมกัน โดยแต่ละแอปจะมีข้อมูลการกำหนดค่าของตัวเอง

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
const defaultAuth = admin.auth();
const defaultDatabase = admin.database();

// Use the otherApp variable to retrieve the other app's services
const otherAuth = otherApp.auth();
const 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)

ไป

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

ค#

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

กำหนดขอบเขตสำหรับฐานข้อมูลเรียลไทม์และการตรวจสอบสิทธิ์

หากคุณกำลังใช้เครื่องยนต์ VM Google Compute กับ Google เริ่มต้นการประยุกต์ใช้ข้อมูลประจำตัวสำหรับเรียลไทม์หรือฐานข้อมูลการตรวจสอบให้แน่ใจว่าจะยังตั้งขวา ขอบเขตการเข้าถึง สำหรับฐานข้อมูลเรียลไทม์และการรับรองความถูกต้องคุณจะต้องขอบเขตสิ้นสุดใน userinfo.email และทั้ง cloud-platform หรือ firebase.database ในการตรวจสอบขอบเขตการเข้าถึงที่มีอยู่และเปลี่ยนพวกเขาเรียกใช้คำสั่งต่อไปนี้โดยใช้ 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"

ขั้นตอนถัดไป

เรียนรู้เกี่ยวกับ Firebase:

เพิ่มคุณสมบัติ Firebase ให้กับแอปของคุณ: