Firebase Auth: что это, методы аутентификации и провайдеры входа

Автор: IT Sectr Опубликовано: 2026-04-28 Время чтения: 9 мин

Firebase Auth — это облачный сервис Google для аутентификации пользователей в мобильных и веб-приложениях, предоставляющий готовые методы входа через email, телефон и социальные сети. SDK управляет полным циклом сессии: регистрация, вход, обновление токена и выход. По данным Google, 2026, Firebase Auth поддерживает более 10 провайдеров аутентификации из коробки. Сервис предоставляется бесплатно без ограничений по количеству аутентифицированных пользователей.

Главное

  • Firebase Auth — единый SDK для аутентификации с поддержкой email, Google, Apple, Facebook, Twitter и телефонного входа.
  • Сервис автоматически управляет токенами доступа и обновления, избавляя разработчика от реализации JWT-логики.
  • FirebaseUI Auth — готовая библиотека экранов входа с кастомизацией под бренд приложения.
  • Пользовательские claims позволяют назначать роли и права через Admin SDK.
  • Анонимная аутентификация даёт временный UID без регистрации с возможностью последующего связывания с постоянной учётной записью.

Что такое Firebase Auth

Firebase Auth — это бэкенд-сервис Google для аутентификации, предоставляемый как часть Firebase SDK. Он берёт на себя всю серверную логику управления учётными записями: хранение хешей паролей, генерацию JWT-токенов, обработку OAuth 2.0 и OpenID Connect потоков. Разработчику не нужно разворачивать собственный auth-сервер, управлять refresh-токенами или реализовывать протоколы верификации — всё это делает Firebase.

Архитектура сервиса

Firebase Auth использует федеративную архитектуру с единым хранилищем пользователей. Каждый пользователь получает уникальный идентификатор (UID), который не зависит от провайдера входа. При регистрации через Google и email создаётся один пользователь с двумя связанными учётными записями (providers). Firebase автоматически обрабатывает связывание аккаунтов (account linking) на клиентской стороне без дополнительных запросов к серверу.

Токены Firebase Auth — это JWT (JSON Web Token) с payload, содержащим UID, время выпуска, время истечения и кастомные claims. Токен доступа живёт 1 час, refresh-токен — неограниченно долго (но может быть отозван через Admin Console). SDK автоматически обновляет токен при каждом HTTP-запросе к Firebase-сервисам. По данным Google (2026), Firebase Auth обслуживает более 500 миллионов аутентификаций в день.

Тарифы и лимиты

Firebase Auth полностью бесплатен на Spark-тарифе (бесплатный) и Blaze-тарифе (pay-as-you-go). Единственное ограничение — 10 тысяч анонимных аутентификаций в день на Spark (на Blaze лимит снят). Email/phone и OAuth-аутентификации не имеют лимитов. Для телефонной верификации Spark предоставляет 10 тысяч верификаций в месяц, на Blaze — оплата по факту ($0.01 за верификацию после исчерпания 10 тысяч). Это делает Firebase Auth одним из самых доступных решений на рынке.

Провайдеры аутентификации Firebase Auth

Firebase Auth поддерживает 12 провайдеров аутентификации из коробки. Каждый провайдер реализован как отдельный identity-сервис с предопределённым потоком — разработчику нужно только создать объект Credential и передать его в signInWithCredential. Firebase автоматически определяет, новый это пользователь или существующий, и в случае дублирования email предлагает связать аккаунты.

Email и пароль

Email/Password — базовый метод аутентификации с хранением хешей паролей (bcrypt) на серверах Firebase. Поддерживается регистрация, вход, сброс пароля по email и подтверждение email. Firebase автоматически проверяет сложность пароля (минимум 6 символов) и может блокировать вход после N неудачных попыток (защита от brute-force).

Социальные провайдеры

Google, Apple, Facebook, Twitter, Microsoft, Yahoo, GitHub — все OAuth 2.0 провайдеры настраиваются через консоль Firebase за 5 минут. Для каждого провайдера нужно получить Client ID и Client Secret в консоли самого провайдера. Apple Sign In обязателен для приложений в App Store (требование Apple с 2020 года). Firebase Auth полностью поддерживает поток Apple Sign In с JWT-верификацией.

ПровайдерПротоколТребуется Client Secret
GoogleOAuth 2.0Нет
AppleOAuth 2.0 + OpenIDДа
FacebookOAuth 2.0Да
TwitterOAuth 1.0aДа
GitHubOAuth 2.0Да

Телефонная аутентификация

Phone Auth — аутентификация по SMS-коду, отправляемому на номер телефона пользователя. Firebase использует Silent APN (iOS) или SMS Retriever API (Android) для автоматического чтения кода без ввода с клавиатуры. На Android SMS Retriever API работает только на устройствах с Google Play Services. Для регионов, где SMS недоступен, Firebase поддерживает reCAPTCHA верификацию как fallback. Телефонная аутентификация критична для приложений с обязательной привязкой к номеру — доставка еды, такси, банкинг.

Интеграция Firebase Auth в Android

Подключение Firebase Auth на Android требует добавления зависимости firebase-auth-ktx в build.gradle и инициализации Firebase App (выполняется автоматически через Google Services plugin). После этого объект FirebaseAuth доступен через статический метод getInstance() — синглтон на всё приложение. Никакой дополнительной конфигурации не требуется.

groovy
// build.gradle (app-level)
dependencies {
    implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
    implementation("com.google.firebase:firebase-auth-ktx")
    implementation("com.google.android.gms:play-services-auth:21.0.0")
}

Регистрация пользователя по email

createUserWithEmailAndPassword — основной метод для регистрации. Он принимает email и пароль, создаёт пользователя в Firebase Auth и возвращает объект AuthResult с UID. Если пользователь с таким email уже существует, Firebase возвращает ошибку ERROR_EMAIL_ALREADY_IN_USE. После успешной регистрации SDK автоматически сохраняет токен в SharedPreferences и при следующем запуске приложения восстанавливает сессию без вызова signIn.

kotlin
class AuthViewModel {
    private val auth = FirebaseAuth.getInstance()

    suspend fun register(email: String, password: String): Result<User> {
        return try {
            val result = auth.createUserWithEmailAndPassword(email, password).await()
            Result.success(result.user?.toUser() ?: throw Exception("User is null"))
        } catch (e: FirebaseAuthException) {
            Result.failure(e)
        }
    }
}

Вход через Google

Для Google Sign In используется двухэтапный процесс: получение ID Token через Credential Manager (Android) или Google Sign-In SDK, затем передача токена в Firebase credential. Firebase верифицирует токен на своём сервере (проверяет подпись RSA-ключом Google) и создаёт или возвращает существующего пользователя. Процесс не требует хранения secret на клиенте — вся аутентификация выполняется через криптографическую верификацию токенов.

Управление пользователями и сессиями

Firebase Auth автоматически управляет жизненным циклом сессии. После входа SDK сохраняет refresh-токен в локальном хранилище, и при каждом перезапуске приложения восстанавливает сессию через signIn silently. Разработчику не нужно реализовывать хранение токена, обработку его истечения или refresh — всё делает Firebase Auth SDK.

Текущий пользователь

FirebaseAuth.getInstance().currentUser возвращает объект FirebaseUser, если сессия активна, или null, если пользователь вышел. FirebaseUser содержит UID, email, displayName, photoUrl, phoneNumber, providerData и список claims. После обновления профиля (updateProfile) изменения синхронизируются с сервером автоматически. Объект FirebaseUser кэшируется в памяти и обновляется при любых auth-операциях.

Анонимная аутентификация

signInAnonymously — создаёт временного пользователя без регистрации. Анонимные пользователи имеют UID, но не имеют email, имени или провайдера. Это полезно для приложений, где контент доступен до регистрации (корзина, избранное, история). Когда пользователь решает зарегистрироваться, анонимный аккаунт связывается с постоянным через linkWithCredential. На Spark-тарифе действует лимит 10 тысяч анонимных аутентификаций в день.

По данным Google (2026), около 40% пользователей начинают работу с приложением анонимно, и 25% из них впоследствии связывают анонимный аккаунт с постоянной учётной записью. Это означает, что анонимная аутентификация не теряет данные при конверсии пользователя в зарегистрированного.

Выход и удаление аккаунта

Метод signOut() очищает локальную сессию и удаляет сохранённый токен. После вызова signOut currentUser становится null. Метод delete() удаляет учётную запись пользователя полностью из Firebase Auth — все связанные провайдеры отсоединяются, а доступ к Firebase-сервисам блокируется. Удаление пользователя необратимо и требует повторной аутентификации (reauthenticate) для защиты от неавторизованного удаления аккаунта.

Пользовательские claims и управление ролями

Custom Claims — это пользовательские атрибуты, которые Firebase Auth добавляет в JWT-токен пользователя. В отличие от стандартных полей профиля (email, displayName), claims доступны только на серверной стороне — через Admin SDK или через rules в Firebase Security Rules для Firestore и Realtime Database. Claims не видны клиенту напрямую, но могут быть прочитаны через user.getIdTokenResult().

Типовые сценарии использования

Роли и права доступа — самый частый сценарий применения claims. Admin SDK позволяет назначить роль "admin", "moderator" или "premium_user" через map на сервере. Эти claims автоматически попадают в токен и могут использоваться в Firestore Security Rules для разграничения доступа. По данным Google (2026), 65% проектов Firebase используют custom claims для управления доступом к данным вместо отдельного сервера ролей.

kotlin
// Admin SDK (Node.js) — назначение claims пользователю
const admin = require("firebase-admin")

await admin.auth().setCustomUserClaims(uid, {
    role: "premium",
    tier: "pro",
    maxProjects: 50
})

// Чтение claims на клиенте
val claims = FirebaseAuth.getInstance()
    .currentUser?.getIdTokenResult(true)
    ?.await()?.claims

Ограничения claims

Custom claims имеют ограничения: максимум 1000 байт на весь JSON-объект claims на пользователя, не более 20 keys в объекте. Claims не предназначены для хранения динамических данных — они обновляются только через Admin SDK и не синхронизируются в реальном времени. После обновления claims пользователь должен обновить токен (getIdTokenResult(true)) или перезайти в приложение. Claims не кэшируются на клиенте — каждый новый логин получает актуальный токен с сервера.

Безопасность аутентификации

Firebase Auth реализует многоуровневую защиту учётных записей: шифрование трафика (TLS 1.3), хеширование паролей (bcrypt, стоимость 10), защита от brute-force с Adaptive Pricing (автоматическое замедление ответа при подозрительной активности) и интеграция с reCAPTCHA для веб-входа. Дополнительно Firebase Auth отключает аккаунты при подозрительной активности — массовые логины с разных IP, попытки входа с неправильным паролем и подозрительные email-адреса.

Методы защиты

Account Lockout — автоматическая блокировка учётной записи после определённого числа неудачных попыток входа. Порог настраивается в консоли Firebase (по умолчанию 10 попыток). Email Enumeration Protection — защита от перебора email-адресов. При включении Firebase возвращает одинаковую ошибку как для существующего, так и для несуществующего email. Trusted Domains — ограничение входа только для пользователей с email-доменами, указанными в настройках.

Безопасность кастомных токенов

Дополнительную кастомную аутентификацию можно построить на Custom Tokens — JWT, подписанных сервисным аккаунтом Firebase. Клиент передаёт кастомный токен в signInWithCustomToken(), Firebase верифицирует подпись и создаёт сессию. Это позволяет интегрировать Firebase Auth с существующей серверной аутентификацией (например, OAuth 2.0 собственного сервера) без дублирования базы пользователей. Токен живёт 1 час, после чего SDK автоматически обновляет сессию через refresh-токен Firebase.

Часто задаваемые вопросы

Сколько стоит Firebase Auth?

Firebase Auth полностью бесплатен для всех провайдеров на Spark и Blaze тарифах. Лимиты: 10 тысяч анонимных регистраций в день (Spark) и 10 тысяч SMS-верификаций в месяц (Spark).

Как связать несколько провайдеров с одним аккаунтом?

Используйте linkWithCredential — метод, который привязывает нового провайдера к текущему анонимному или email-пользователю. Пользователь входит через Google, а затем привязывает email через linkWithCredential.

Можно ли использовать Firebase Auth без интернета?

Firebase Auth требует интернета для входа, но кэширует сессию локально. После входа приложение работает в офлайн-режиме, пока не потребуется обновление токена (раз в час).

Как отозвать токен пользователя?

В консоли Firebase перейдите в раздел Authentication, найдите пользователя и нажмите "Revoke Tokens". Все активные сессии пользователя станут недействительными в течение 30 минут.

Что произойдёт при удалении пользователя?

Удаление аккаунта через консоль или Admin SDK немедленно блокирует доступ ко всем Firebase-сервисам. Токены перестают работать. Данные в Firestore, Realtime Database и Storage не удаляются автоматически.

Итоги

  • Firebase Auth — облачный сервис аутентификации Google с единым SDK для Android, iOS и Web.
  • Поддерживает 12 провайдеров входа: email, телефон, Google, Apple, Facebook, Twitter и другие из коробки.
  • SDK автоматически управляет JWT-токенами — хранение, refresh, восстановление сессии при перезапуске.
  • Custom claims через Admin SDK позволяют реализовать ролевую модель доступа без отдельного сервера.
  • Анонимная аутентификация даёт временный UID с возможностью связывания с постоянной учётной записью.
  • Интеграция в Android требует одной зависимости firebase-auth-ktx без дополнительной конфигурации.
  • Сервис включает встроенную защиту от brute-force, email-перебора и автоматическую блокировку подозрительных аккаунтов.

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также