SDK Firebase обрабатывают всю аутентификацию и взаимодействие с Firebase Realtime Database от вашего имени. Однако если вы находитесь в среде, в которой нет клиентского SDK, или хотите избежать накладных расходов, связанных с постоянным подключением к базе данных, вы можете использовать REST API Realtime Database для чтения и записи данных.
Аутентифицируйте пользователей одним из следующих методов:
Токены доступа Google OAuth2 . Как правило, возможность чтения и записи в Realtime Database регулируется правилами Realtime Database . Но вы можете получить доступ к своим данным с сервера и предоставить этому серверу полный доступ для чтения и записи к вашим данным с помощью токена доступа Google OAuth2, сгенерированного из учетной записи службы.
Токены идентификатора Firebase . Вы также можете отправлять запросы, аутентифицированные как отдельный пользователь, например, ограничивая доступ с помощью правил Realtime Database в клиентских SDK. REST API принимает те же токены Firebase ID, которые используются клиентскими SDK.
Токены доступа Google OAuth2
Любые данные, доступные для публичного чтения или записи в соответствии с вашими правилами Realtime Database также доступны для чтения и записи через REST API без какой-либо аутентификации. Однако если вы хотите, чтобы ваш сервер обходил правила Realtime Database , вам необходимо аутентифицировать свои запросы на чтение и запись. Аутентификация через Google OAuth2 требует следующих шагов:
- Создайте токен доступа.
- Аутентифицируйтесь с помощью этого токена доступа.
Создать токен доступа
REST API Realtime Database принимает стандартные токены доступа Google OAuth2 . Токены доступа могут быть созданы с использованием учетной записи службы с соответствующими разрешениями для вашей Realtime Database . Нажатие кнопки «Создать новый закрытый ключ» в нижней части раздела « Учетные записи служб » консоли Firebase позволяет вам легко создать новый файл ключа учетной записи службы, если у вас его еще нет.
Имея файл ключей сервисного аккаунта, вы можете использовать одну из клиентских библиотек Google API для создания токена доступа Google OAuth2 со следующими обязательными областями:
-
https://www.googleapis.com/auth/userinfo.email
-
https://www.googleapis.com/auth/firebase.database
Вот несколько примеров реализаций, показывающих, как создавать токены доступа Google OAuth2 для аутентификации в REST API Realtime Database на различных языках:
Node.js
Использование клиентской библиотеки Google API для Node.js :
var {google} = require("googleapis");
// Load the service account key JSON file.
var serviceAccount = require("path/to/serviceAccountKey.json");
// Define the required scopes.
var scopes = [
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/firebase.database"
];
// Authenticate a JWT client with the service account.
var jwtClient = new google.auth.JWT(
serviceAccount.client_email,
null,
serviceAccount.private_key,
scopes
);
// Use the JWT client to generate an access token.
jwtClient.authorize(function(error, tokens) {
if (error) {
console.log("Error making request to generate access token:", error);
} else if (tokens.access_token === null) {
console.log("Provided service account does not have permission to generate access tokens");
} else {
var accessToken = tokens.access_token;
// See the "Using the access token" section below for information
// on how to use the access token to send authenticated requests to
// the Realtime Database REST API.
}
});
Ява
Использование клиентской библиотеки Google API для Java :
// Load the service account key JSON file
FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json");
// Authenticate a Google credential with the service account
GoogleCredential googleCred = GoogleCredential.fromStream(serviceAccount);
// Add the required scopes to the Google credential
GoogleCredential scoped = googleCred.createScoped(
Arrays.asList(
"https://www.googleapis.com/auth/firebase.database",
"https://www.googleapis.com/auth/userinfo.email"
)
);
// Use the Google credential to generate an access token
scoped.refreshToken();
String token = scoped.getAccessToken();
// See the "Using the access token" section below for information
// on how to use the access token to send authenticated requests to the
// Realtime Database REST API.
Питон
Использование библиотеки google-auth
:
from google.oauth2 import service_account
from google.auth.transport.requests import AuthorizedSession
# Define the required scopes
scopes = [
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/firebase.database"
]
# Authenticate a credential with the service account
credentials = service_account.Credentials.from_service_account_file(
"path/to/serviceAccountKey.json", scopes=scopes)
# Use the credentials object to authenticate a Requests session.
authed_session = AuthorizedSession(credentials)
response = authed_session.get(
"https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json")
# Or, use the token directly, as described in the "Authenticate with an
# access token" section below. (not recommended)
request = google.auth.transport.requests.Request()
credentials.refresh(request)
access_token = credentials.token
Аутентификация с помощью токена доступа
Чтобы отправить аутентифицированные запросы в REST API Realtime Database , передайте сгенерированный выше токен доступа Google OAuth2 в качестве заголовка Authorization: Bearer <ACCESS_TOKEN>
или параметра строки запроса access_token=<ACCESS_TOKEN>
. Вот пример запроса curl
для чтения имени Ады:
curl "https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json?access_token=<ACCESS_TOKEN>"
Обязательно замените <DATABASE_NAME>
именем вашей Realtime Database и <ACCESS_TOKEN>
токеном доступа Google OAuth2.
Успешный запрос будет обозначен кодом состояния HTTP 200 OK
. Ответ содержит извлекаемые данные:
{"first":"Ada","last":"Lovelace"}
Токены идентификатора Firebase
Когда пользователь или устройство входит в систему с использованием Firebase Authentication , Firebase создает соответствующий идентификационный токен, который однозначно идентифицирует его и предоставляет ему доступ к нескольким ресурсам, таким как Realtime Database и Cloud Storage . Вы можете повторно использовать этот токен идентификатора для аутентификации REST API Realtime Database и отправлять запросы от имени этого пользователя.
Создать идентификационный токен
Чтобы получить токен идентификатора Firebase от клиента, выполните действия, описанные в разделе Получение токенов идентификатора на клиентах .
Обратите внимание, что срок действия токенов ID истекает через короткий период времени, и их следует использовать как можно быстрее после их получения.
Аутентификация с помощью идентификационного токена
Чтобы отправить аутентифицированные запросы в REST API Realtime Database , передайте созданный выше токен идентификатора в качестве параметра строки запроса auth=<ID_TOKEN>
. Вот пример запроса curl
для чтения имени Ады:
curl "https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json?auth=<ID_TOKEN>"
Обязательно замените <DATABASE_NAME>
именем вашей Realtime Database и <ID_TOKEN>
токеном идентификатора Firebase.
Успешный запрос будет обозначен кодом состояния HTTP 200 OK
. Ответ содержит извлекаемые данные:
{"first":"Ada","last":"Lovelace"}
Унаследованные токены
Если вы все еще используете устаревшие токены аутентификации Firebase, мы рекомендуем обновить вашу аутентификацию REST до одного из методов аутентификации, описанных выше.
REST API Realtime Database по-прежнему поддерживает аутентификацию с помощью устаревших токенов аутентификации, включая секреты . Секреты вашей Realtime Database можно найти в разделе «Учетные записи служб» консоли Firebase .
Секреты — это долговечные полномочия. Мы рекомендуем создать новый секрет и отозвать существующий при удалении пользователей с секретным доступом (например, владельцев) из проекта.