Firebase Auth е облачна услуга на Google за удостоверяване на потребители в мобилни и уеб приложения, предоставяща готови методи за вход чрез имейл, телефон и социални мрежи. SDK управлява пълния цикъл на сесията: регистрация, вход, обновяване на токен и изход. Според Google, 2026, Firebase Auth поддържа повече от 10 доставчика на удостоверяване направо от кутията. Услугата се предоставя безплатно без ограничения за броя на удостоверените потребители.
Основни точки
Firebase Auth е backend услуга на Google за удостоверяване, предоставяна като част от Firebase SDK. Тя поема цялата сървърна логика за управление на акаунти: съхранение на хешове на пароли, генериране на JWT токени, обработка на OAuth 2.0 и OpenID Connect потоци. Разработчикът не трябва да разгръща собствен auth сървър, да управлява refresh токени или да имплементира протоколи за верификация — всичко това се прави от Firebase.
Firebase Auth използва федеративна архитектура с единно хранилище за потребители. Всеки потребител получава уникален идентификатор (UID), който не зависи от доставчика за вход. При регистрация чрез Google и имейл се създава един потребител с два свързани акаунта (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 ограничението е премахнато). Удостоверяванията чрез имейл/телефон и OAuth нямат лимити. За телефонна верификация Spark предоставя 10 хиляди верификации на месец, Blaze — плащане според използването ($0.01 на верификация след изчерпване на 10 хиляди). Това прави Firebase Auth едно от най-достъпните решения на пазара.
Firebase Auth поддържа 12 доставчика на удостоверяване направо от кутията. Всеки доставчик е имплементиран като отделна идентификационна услуга с предварително дефиниран поток — разработчикът трябва само да създаде обект Credential и да го предаде на signInWithCredential. Firebase автоматично определя дали потребителят е нов или съществуващ, а в случай на дублиране на имейл предлага свързване на акаунти.
Имейл/Парола — основен метод за удостоверяване със съхранение на хешове на пароли (bcrypt) на сървърите на Firebase. Поддържат се регистрация, вход, нулиране на парола чрез имейл и потвърждение на имейл. 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 |
|---|---|---|
| OAuth 2.0 | Не | |
| Apple | OAuth 2.0 + OpenID | Да |
| OAuth 2.0 | Да | |
| OAuth 1.0a | Да | |
| GitHub | OAuth 2.0 | Да |
Phone Auth — удостоверяване чрез SMS код, изпратен на телефонния номер на потребителя. Firebase използва Silent APN (iOS) или SMS Retriever API (Android) за автоматично разчитане на кода без въвеждане от клавиатурата. На Android SMS Retriever API работи само на устройства с Google Play Services. За региони, където SMS не е наличен, Firebase поддържа reCAPTCHA верификация като резервен вариант. Телефонното удостоверяване е критично за приложения със задължително свързване с номер — доставка на храна, такси, банкиране.
Свързване на Firebase Auth в Android изисква добавяне на зависимостта firebase-auth-ktx в build.gradle и инициализация на Firebase App (изпълнява се автоматично чрез Google Services plugin). След това обектът FirebaseAuth е достъпен чрез статичния метод getInstance() — сингълтон за цялото приложение. Не е необходима допълнителна конфигурация.
// build.gradle (ниво на приложението)
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")
}
createUserWithEmailAndPassword — основният метод за регистрация. Той приема имейл и парола, създава потребител във Firebase Auth и връща обект AuthResult с UID. Ако потребител с този имейл вече съществува, Firebase връща грешка ERROR_EMAIL_ALREADY_IN_USE. След успешна регистрация SDK автоматично запазва токена в SharedPreferences и при следващото стартиране на приложението възстановява сесията без извикване на signIn.
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 Sign In се използва двуетапен процес: получаване на ID Token чрез Credential Manager (Android) или Google Sign-In SDK, след което предаване на токена на Firebase credential. Firebase проверява токена на своя сървър (проверява подписа с RSA ключа на Google) и създава или връща съществуващия потребител. Процесът не изисква съхранение на тайна от клиентска страна — цялото удостоверяване се извършва чрез криптографска проверка на токените.
Firebase Auth автоматично управлява жизнения цикъл на сесията. След входа SDK запазва refresh токена в локално хранилище и при всяко рестартиране на приложението възстановява сесията чрез signIn silently. Разработчикът не трябва да имплементира съхранение на токен, обработка на изтичането му или обновяване — всичко се прави от Firebase Auth SDK.
FirebaseAuth.getInstance().currentUser връща обект FirebaseUser, ако сесията е активна, или null, ако потребителят е излязъл. FirebaseUser съдържа UID, имейл, displayName, photoUrl, phoneNumber, providerData и списък с claims. След актуализиране на профила (updateProfile) промените автоматично се синхронизират със сървъра. Обектът FirebaseUser се кешира в паметта и се актуализира при всяка auth операция.
signInAnonymously — създава временен потребител без регистрация. Анонимните потребители имат UID, но нямат имейл, име или доставчик. Това е полезно за приложения, където съдържанието е достъпно преди регистрация (кошница, любими, история). Когато потребителят реши да се регистрира, анонимният акаунт се свързва с постоянен чрез linkWithCredential. В тарифата Spark има лимит от 10 хиляди анонимни удостоверявания на ден.
Според Google (2026), около 40% от потребителите започват работа с приложението анонимно, а 25% от тях по-късно свързват анонимния акаунт с постоянен. Това означава, че анонимното удостоверяване не губи данни при конвертиране на потребителя в регистриран.
Методът signOut() изчиства локалната сесия и премахва запазения токен. След извикване на signOut, currentUser става null. Методът delete() напълно изтрива потребителския акаунт от Firebase Auth — всички свързани доставчици се прекъсват и достъпът до Firebase услугите се блокира. Изтриването на потребител е необратимо и изисква повторно удостоверяване (reauthenticate) за защита от неоторизирано изтриване на акаунт.
Custom Claims са персонализирани атрибути, които Firebase Auth добавя към JWT токена на потребителя. За разлика от стандартните полета на профила (имейл, displayName), claims са достъпни само от сървърна страна — чрез Admin SDK или чрез правила във Firebase Security Rules за Firestore и Realtime Database. Claims не са пряко видими за клиента, но могат да бъдат прочетени чрез user.getIdTokenResult().
Роли и права за достъп — най-честият сценарий за прилагане на claims. Admin SDK позволява задаване на роля „admin“, „moderator“ или „premium_user“ чрез картографиране на сървъра. Тези claims автоматично попадат в токена и могат да се използват във Firestore Security Rules за разграничаване на достъпа. Според Google (2026), 65% от Firebase проектите използват custom claims за управление на достъпа до данни вместо отделен сървър за роли.
// 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
Custom claims имат ограничения: максимум 1000 байта за целия JSON claims обект на потребител, не повече от 20 ключа в обекта. Claims не са предназначени за съхранение на динамични данни — се актуализират само чрез Admin SDK и не се синхронизират в реално време. След актуализиране на claims, потребителят трябва да обнови токена (getIdTokenResult(true)) или да влезе отново в приложението. Claims не се кешират от клиентска страна — всяко ново влизане получава актуалния токен от сървъра.
Firebase Auth имплементира многослойна защита на акаунти: криптиране на трафика (TLS 1.3), хеширане на пароли (bcrypt, цена 10), защита срещу brute-force с Adaptive Pricing (автоматично забавяне на отговора при подозрителна активност) и интеграция с reCAPTCHA за уеб вход. Допълнително Firebase Auth деактивира акаунти при подозрителна активност — масови влизания от различни IP адреси, опити за влизане с грешна парола и подозрителни имейл адреси.
Account Lockout — автоматично блокиране на акаунт след определен брой неуспешни опита за влизане. Прагът се настройва в конзолата на Firebase (по подразбиране 10 опита). Email Enumeration Protection — защита срещу разкриване на имейл адреси. Когато е включена, Firebase връща същата грешка както за съществуващ, така и за несъществуващ имейл. Trusted Domains — ограничаване на входа само за потребители с имейл домейни, посочени в настройките.
Допълнително персонализирано удостоверяване може да бъде изградено върху Custom Tokens — JWT, подписани със сервизен акаунт на Firebase. Клиентът предава персонализирания токен на signInWithCustomToken(), Firebase проверява подписа и създава сесия. Това позволява интегриране на Firebase Auth със съществуващо сървърно удостоверяване (напр. OAuth 2.0 на собствен сървър) без дублиране на потребителската база данни. Токенът живее 1 час, след което SDK автоматично обновява сесията чрез Firebase refresh токен.
Често задавани въпроси
Firebase Auth е напълно безплатен за всички доставчици в тарифите Spark и Blaze. Ограничения: 10 хиляди анонимни регистрации на ден (Spark) и 10 хиляди SMS верификации на месец (Spark).
Използвайте linkWithCredential — методът, който свързва нов доставчик с текущия анонимен или имейл потребител. Потребителят влиза чрез Google, след което свързва имейла чрез linkWithCredential.
Firebase Auth изисква интернет за влизане, но кешира сесията локално. След входа приложението работи в офлайн режим, докато не се наложи обновяване на токена (веднъж на час).
В конзолата на Firebase отидете в раздела Authentication, намерете потребителя и кликнете на „Revoke Tokens“. Всички активни сесии на потребителя ще станат невалидни в рамките на 30 минути.
Изтриването на акаунт чрез конзолата или Admin SDK незабавно блокира достъпа до всички Firebase услуги. Токените спират да работят. Данните във Firestore, Realtime Database и Storage не се изтриват автоматично.
Резюме
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също