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

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

  • Чтение и запись данных базы данных реального времени с полными правами администратора.
  • Программно отправляйте сообщения 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 Джава Питон Идти С#
Пользовательский выпуск токенов
Проверка идентификационного токена
Управление пользователями
Управление доступом с помощью пользовательских утверждений
Обновить отзыв токена
Импортировать пользователей
Управление файлами cookie сеанса
Создание ссылок на действия по электронной почте
Управление конфигурациями поставщиков SAML/OIDC
Поддержка нескольких арендаторов
База данных реального времени *
Облачный обмен сообщениями Firebase
Многоадресная рассылка FCM
Управление подписками на темы FCM
Облачное хранилище
Облачный пожарный магазин
Функции постановки в очередь с помощью Cloud Tasks
Управление проектом
Правила безопасности
Управление моделями машинного обучения
Удаленная конфигурация Firebase
Проверка приложения Firebase
Расширения Firebase

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

Предварительные условия

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

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

    • Администратор Node.js SDK — Node.js 14+ (рекомендуется Node.js 18+)
      Поддержка Node.js 14 и 16 устарела.
    • Java SDK для администратора — Java 8+
    • Admin Python SDK — Python 3.7+ (рекомендуется Python 3.8+)
      Поддержка Python 3.7 устарела.
    • Администратор Go SDK — Go 1.20+
    • Admin .NET SDK — .NET Framework 4.6.2+ или .NET Standard 2.0 для .NET 6.0+.

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

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

  • Проект Firebase.
  • Учетная запись службы Firebase Admin SDK для связи с Firebase. Этот сервисный аккаунт создается автоматически, когда вы создаете проект Firebase или добавляете Firebase в проект Google Cloud.
  • Файл конфигурации с учетными данными вашей сервисной учетной записи.

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

Добавить SDK

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

Node.js

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

npm install firebase-admin --save

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

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

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

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

Джава

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

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

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

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

Питон

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

sudo pip install firebase-admin

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

pip install --user firebase-admin

Идти

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

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

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

С#

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

Install-Package FirebaseAdmin -Version 3.0.0

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

dotnet add package FirebaseAdmin --version 3.0.0

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

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

Инициализируйте SDK

После создания проекта Firebase вы можете инициализировать SDK с помощью учетных данных приложения Google по умолчанию . Поскольку поиск учетных данных по умолчанию полностью автоматизирован в средах Google, без необходимости предоставления переменных среды или другой конфигурации, этот способ инициализации SDK настоятельно рекомендуется для приложений, работающих в средах Google, таких как Cloud Run, App Engine и Cloud Functions.

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

Node.js

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

С#

FirebaseApp.Create();

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

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

Admin SDK также предоставляет учетные данные, которые позволяют вам аутентифицироваться с помощью токена обновления Google OAuth2 :

Node.js

const myRefreshToken = '...'; // Get refresh token from OAuth2 flow

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

Джава

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

Питон

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 в средах, отличных от Google.

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

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

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

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

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

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

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

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

Чтобы установить переменную среды:

Задайте для переменной среды GOOGLE_APPLICATION_CREDENTIALS путь к файлу JSON, содержащему ключ вашей учетной записи службы. Эта переменная применяется только к текущему сеансу оболочки, по��тому, если вы открываете новый сеанс, установите переменную еще раз.

Линукс или МакОС

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

Окна

С PowerShell:

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

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

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

Node.js

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

Джава

FirebaseOptions options = 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)
}

С#

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.GetApplicationDefault(),
    ProjectId = "my-project-id",
});

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

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

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

Джава

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

С#

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

Джава

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

С#

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

Тестирование с использованием учетных данных конечного пользователя gcloud

При локал��ном тестировании Admin SDK с учетными данными приложения Google по умолчанию, полученными при запуске gcloud auth application-default login , для использования аутентификации Firebase необходимы дополнительные изменения по следующим причинам:

  • Аутентификация Firebase не принимает учетные данные конечного пользователя gcloud, созданные с использованием идентификатора клиента gcloud OAuth.
  • Аутентификация Firebase требует, чтобы идентификатор проекта был предоставлен при инициализации для этих типов учетных данных конечного пользователя.

В качестве обходного пути вы можете сгенерировать учетные данные приложения Google по умолчанию в gcloud , используя свой собственный идентификатор клиента OAuth 2.0 . Идентификатор клиента OAuth должен относиться к типу приложения для настольного компьютера .

gcloud

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

Вы можете указать идентификатор проекта явно при инициализации приложения или просто использовать переменную среды GOOGLE_CLOUD_PROJECT . Последнее позволяет избежать необходимости вносить какие-ли��о дополнительные изменения для тестирования вашего кода.

Чтобы явно указать идентификатор проекта:

Node.js

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

initializeApp({
  credential: applicationDefault(),
  projectId: '<FIREBASE_PROJECT_ID>',
});

Джава

FirebaseOptions options = FirebaseOptions.builder()
    .setCredentials(GoogleCredentials.getApplicationDefault())
    .setProjectId("<FIREBASE_PROJECT_ID>")
    .build();

FirebaseApp.initializeApp(options);

Питон

app_options = {'projectId': '<FIREBASE_PROJECT_ID>'}
default_app = firebase_admin.initialize_app(options=app_options)

Идти

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

С#

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.GetApplicationDefault(),
    ProjectId = "<FIREBASE_PROJECT_ID>",
});

Следующие шаги

Узнайте больше о Firebase:

Добавьте функции Firebase в свое приложение: