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

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

Предпосылки

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

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

    • SDK для администрирования Node.js - Node.js 10.10.0+
    • Admin Java SDK - 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

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

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

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

Python

SDK Firebase Admin Python доступен через 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.17.1

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

$ dotnet add package FirebaseAdmin --version 1.17.1

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

<ItemGroup>
  <PackageReference Include="FirebaseAdmin" Version="1.17.1" />
</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 путь к файлу 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 = 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)
}

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

C #

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

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

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

Node.js

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

Джава

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

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

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

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

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

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: