Google is committed to advancing racial equity for Black communities. See how.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Добавьте Firebase Admin SDK на свой сервер

Admin SDK позволяет вам взаимодействовать с Firebase из привилегированных сред для выполнения таких действий, как:

  • Чтение и запись данных базы данных в реальном времени с полными правами администратора.
  • Программно отправляйте сообщения Firebase Cloud Messaging, используя простой альтернативный подход к протоколам сервера Firebase Cloud Messaging.
  • Генерация и проверка токенов Firebase.
  • Получите доступ к ресурсам Google Cloud Platform, таким как хранилища Cloud Storage и базы данных Cloud Firestore, связанные с вашими проектами Firebase.
  • Создайте свою собственную упрощенную консоль администратора, чтобы выполнять такие действия, как поиск данных пользователя или изменить адрес электронной почты пользователя для аутентификации.

Если вы заинтересованы в использовании Node.js SDK в качестве клиента для доступа конечного пользователя (например, в рабочем столе Node.js или в приложении IoT), а не в качестве доступа администратора из привилегированной среды (например, с сервера), вы Вместо этого следует следовать инструкциям по настройке клиентского JavaScript SDK .

Вот таблица функций, показывающая, какие функции Firebase поддерживаются на каждом языке:

Характерная черта Node.js Ява питон Идти C #
Чеканка пользовательских жетонов
Проверка токена
Управление пользователями
Контроль доступа с помощью пользовательских утверждений
Обновить токен
Импорт пользователей
Управление сессионными файлами cookie
Создание ссылок на действия электронной почты
Управление конфигурациями провайдера SAML / OIDC
Поддержка нескольких арендаторов
База данных в реальном времени *
Firebase Cloud Messaging
FCM Multicast
Управление подписками на темы FCM
Облачное хранилище
Облачный Пожарный Магазин
Управление проектом
Правила безопасности
ML Model Management
Firebase Remote Config

Чтобы узнать больше об интеграции Admin SDK для этих целей, см. Соответствующую документацию базы данных реального времени , FCM , аутентификации и облачного хранилища . Остальная часть этой страницы посвящена базовой настройке Admin SDK.

Предпосылки

  • Убедитесь, что у вас есть серверное приложение.

  • Убедитесь, что на вашем сервере выполняется следующее в зависимости от того, какой SDK администратора вы используете:

    • SDK Admin Node.js - Node.js 10.10.0+
    • SDK администратора Java - Java 7+ (рекомендуется Java 8+)
      Поддержка Java 7 устарела.
    • SDK администратора Python - Python 3.5+
    • Admin Go SDK - Go 1.11+
    • Admin .NET SDK - .NET Framework 4.5+ или .Net Core 1.5+

Настройте проект Firebase и учетную запись службы

Чтобы использовать Firebase Admin SDK, вам потребуется следующее:

  • Проект Firebase
  • Сервисная учетная запись для связи с Firebase
  • Файл конфигурации с учетными данными вашей учетной записи

Если у вас еще нет проекта Firebase, вам нужно создать его в консоли Firebase . Посетите Understand Firebase Projects, чтобы узнать больше о проектах Firebase.

Добавьте SDK

Если вы настраиваете новый проект, вам нужно установить SDK на выбранный вами язык.

Node.js

Пакет Firebase Admin Node.js доступен на npm. Если у вас еще нет файла package.json , создайте его с помощью npm init . Затем установите пакет firebase-admin npm и сохраните его в свой package.json :

 $ npm install firebase-admin --save
 

Чтобы использовать модуль в вашем приложении, require его из любого файла JavaScript:

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

Если вы используете ES2015, вы можете вместо этого import модуль:

 import * as admin from 'firebase-admin';
 

Ява

Java SDK Firebase Admin публикуется в центральном репозитории Maven. Чтобы установить библиотеку, объявите ее как зависимость в файле build.gradle :

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

Если вы используете Maven для создания своего приложения, вы можете добавить следующую зависимость в ваш pom.xml :

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

питон

FireBase Admin Python SDK доступен через pip . Вы можете установить библиотеку для всех пользователей через sudo :

 $ sudo pip install firebase-admin
 

Или вы можете установить библиотеку только для текущего пользователя, передав флаг --user :

 $ pip install --user firebase-admin
 

Идти

Go Admin SDK можно установить с помощью утилиты go get :

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

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

C #

.NET Admin SDK можно установить с помощью диспетчера пакетов .NET:

 $ Install-Package FirebaseAdmin -Version 1.15.0
 

Или установите его с помощью dotnet командной строки dotnet :

 $ dotnet add package FirebaseAdmin --version 1.15.0
 

Или вы можете установить его, добавив следующую ссылку на пакет в ваш файл .csproj :

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

Инициализировать SDK

Создав проект Firebase, вы можете инициализировать SDK с помощью стратегии авторизации, которая объединяет файл учетной записи службы и учетные данные приложения Google по умолчанию .

Проекты Firebase поддерживают учетные записи служб Google, которые можно использовать для вызова API-интерфейсов сервера Firebase с сервера приложений или из доверенной среды. Если вы разрабатываете код локально или внедряете приложение локально, вы можете использовать учетные данные, полученные с помощью этой учетной записи службы, для авторизации запросов сервера.

Чтобы аутентифицировать учетную запись службы и авторизовать ее для доступа к службам Firebase, вы должны сгенерировать файл закрытого ключа в формате JSON.

Чтобы создать файл личного ключа для вашей учетной записи службы:

  1. В консоли Firebase откройте « Настройки»> « Учетные записи служб» .

  2. Нажмите « Создать новый закрытый ключ» , затем подтвердите, нажав « Создать ключ» .

  3. Надежно храните файл JSON, содержащий ключ.

При авторизации через учетную запись службы у вас есть два варианта предоставления учетных данных для вашего приложения. Вы можете либо установить GOOGLE_APPLICATION_CREDENTIALS среды GOOGLE_APPLICATION_CREDENTIALS , либо явно 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"
 

После того, как вы выполнили вышеуказанные действия, учетные данные приложения по умолчанию (ADC) могут неявно определять ваши учетные данные, позволяя вам использовать учетные данные учетной записи службы при тестировании или работе в средах, отличных от Google.

Инициализируйте SDK, как показано:

Node.js

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

Ява

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

FirebaseApp.initializeApp(options);
 

питон

 default_app = firebase_admin.initialize_app()
 

Идти

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

Использование маркера обновления OAuth 2.0

Admin SDK также предоставляет учетные данные, которые позволяют выполнять аутентификацию с помощью маркера обновления 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'
});
 

Ява

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

питон

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

C #

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

Инициализировать без параметров

SDK также можно инициализировать без параметров. В этом случае SDK использует учетные данные приложения Google по умолчанию и считывает параметры из переменной среды FIREBASE_CONFIG . Если содержимое переменной FIREBASE_CONFIG начинается с { оно будет проанализировано как объект JSON. В противном случае SDK предполагает, что строка - это имя файла JSON, содержащего параметры.

Node.js

 // Initialize the default app
var admin = require('firebase-admin');
var app = admin.initializeApp();
 

Ява

 FirebaseApp.initializeApp();
 

питон

 default_app = firebase_admin.initialize_app()
 

Идти

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

C #

 FirebaseApp.Create();
 

После его инициализации вы можете использовать Admin SDK для выполнения следующих типов задач:

Инициализировать несколько приложений

В большинстве случаев вам нужно только инициализировать одно приложение по умолчанию. Вы можете получить доступ к службам этого приложения двумя эквивалентными способами:

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

Ява

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

питон

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

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;
 

В некоторых случаях требуется одновременное создание нескольких приложений. Например, вы можете прочитать данные из базы данных в реальном времени одного проекта Firebase и создать собственные токены для другого проекта. Или вы можете аутентифицировать два приложения с разными учетными данными. 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
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();
 

Ява

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

питон

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

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

Задать области для базы данных в реальном времени и аутентификации

Если вы используете виртуальную машину Google Compute Engine с учетными данными приложения 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 в свое приложение: