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 поддерживаются на каждом языке:
Дополнительные сведения об интеграции Admin SDK для этих целей см. в соответствующей документации Realtime Database , FCM , Authentication , Remote Config и Cloud Storage . Оставшаяся часть этой страницы посвящена базовой настройке 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+.
- Администратор Node.js SDK — Node.js 14+ (рекомендуется Node.js 18+)
Настройте проект Firebase и учетную запись службы.
Чтобы использовать Firebase Admin SDK , вам потребуется следующее:
- Проект Firebase.
- Учетная запись службы Firebase Admin SDK для связи с Firebase. Этот сервисный аккаунт создается автоматически, когда вы создаете проект Firebase или добавляете Firebase в проект Google Cloud.
- Файл конфигурации с учетными данными вашей учетной записи службы.
Если у вас еще нет проекта Firebase, вам необходимо создать его в консоли Firebase . Посетите раздел «Понимание проектов Firebase», чтобы узнать больше о проектах 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:
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.1
Альтернативно установите его с помощью утилиты командной строки dotnet
:
dotnet add package FirebaseAdmin --version 3.0.1
Или вы можете установить его, добавив следующую ссылку на пакет в файл .csproj
:
<ItemGroup>
<PackageReference Include="FirebaseAdmin" Version="3.0.1" />
</ItemGroup>
Инициализируйте SDK
После создания проекта Firebase вы можете инициализировать SDK с помощью учетных данных приложения Google по умолчанию . Поскольку поиск учетных данных по умолчанию полностью автоматизирован в средах Google, без необходимости предоставления переменных среды или другой конфигурации, этот способ инициализации SDK настоятельно рекомендуется для приложений, работающих в средах Google, таких как Cloud Run, App Engine и Cloud Functions.
Чтобы дополнительно указать параметры инициализации для таких служб, как Realtime Database , Cloud Storage или 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 для выполнения следующих типов задач:
- Внедрить пользовательскую аутентификацию
- Управляйте пользователями Firebase Authentication
- Чтение и запись данных из Realtime Database
- Отправка сообщений Firebase Cloud Messaging
Использование токена обновления 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.
Чтобы создать файл закрытого ключа для вашей учетной записи службы:
В консоли Firebase откройте «Настройки» > «Учетные записи служб» .
Нажмите «Создать новый закрытый ключ» , затем подтвердите действие, нажав «Создать ключ» .
Надежно сохраните файл 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;
В некоторых случаях использования требуется создать несколько приложений одновременно. Например, вы можете прочитать данные из Realtime Database одного проекта 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);
Установите области для Realtime Database и Authentication
Если вы используете виртуальную машину Google Compute Engine с учетными данными приложения Google по умолчанию для Realtime Database или Authentication в реальном времени, обязательно также установите правильные области доступа . Для Realtime Database и Authentication вам нужны области, заканчивающиеся на 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 Authentication необходимы дополнительные изменения по следующим причинам:
- Firebase Authentication не принимает учетные данные конечного пользователя gcloud, созданные с использованием идентификатора клиента gcloud OAuth.
- Firebase Authentication требует, чтобы идентификатор проекта был предоставлен при инициализации для этих типов учетных данных конечного пользователя.
В качестве обходного пути вы можете сгенерировать учетные данные приложения 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 .
Изучите открытый исходный код на GitHub для Node.js , Java и Python .
Прочтите сообщения в блоге, посвященные Admin SDK , одного из создателей Admin SDK . Например: доступ к Firestore и Firebase через прокси-сервер .
Добавьте функции Firebase в свое приложение:
- Напишите бессерверный бэкэнд с помощью Cloud Functions .
- Храните информацию в Realtime Database или данные больших двоичных объектов в Cloud Storage .
- Получайте уведомления с помощью Cloud Messaging .