Firebase Auth:它是什么,身份验证方法与登录提供商

作者: IT Sectr 发布日期: 2026-04-28 阅读时间: 9 分钟

Firebase Auth 是 Google 的云服务,用于在移动和 Web 应用中对用户进行身份验证,提供通过电子邮件、电话和社交网络的现成登录方法。SDK 管理完整的会话周期:注册、登录、令牌更新和退出。根据 Google, 2026Firebase Auth 开箱即用地支持超过 10 个身份验证提供商。该服务免费提供,对已验证用户的数量没有限制。

要点

  • Firebase Auth — 统一身份验证 SDK,支持电子邮件、Google、Apple、Facebook、Twitter 和电话登录。
  • 服务自动管理访问和刷新令牌,使开发者无需实现 JWT 逻辑。
  • FirebaseUI Auth — 现成的登录界面库,可根据应用品牌进行自定义。
  • 自定义声明允许通过 Admin SDK 分配角色和权限。
  • 匿名身份验证提供临时 UID,无需注册,并可在以后与永久账户关联。

什么是 Firebase Auth

Firebase Auth 是 Google 的后端身份验证服务,作为 Firebase SDK 的一部分提供。它承担了所有账户管理的服务器逻辑:存储密码哈希、生成 JWT 令牌、处理 OAuth 2.0 和 OpenID Connect 流程。开发者无需部署自己的身份验证服务器、管理刷新令牌或实现验证协议 — 所有这些都由 Firebase 完成。

服务架构

Firebase Auth 使用联邦架构,拥有统一的用户存储。每个用户获得一个唯一标识符(UID),该标识符独立于登录提供商。通过 Google 和电子邮件注册时,会创建一个用户,同时关联两个账户(providers)。Firebase 自动处理客户端端的账户关联(account linking),无需向服务器发送额外请求。

Firebase Auth 令牌是 JWT(JSON Web 令牌),其 payload 包含 UID、发布时间、过期时间和自定义声明。访问令牌有效期为 1 小时,刷新令牌 — 无限制(但可通过 Admin Console 撤销)。SDK 自动在每个 HTTP 请求到 Firebase 服务时刷新令牌。根据 Google(2026),Firebase Auth 每天服务超过 5 亿次身份验证。

定价和限制

Firebase Auth 在 Spark(免费)和 Blaze(按需付费)套餐中完全免费。唯一的限制是 Spark 套餐每天 1 万次匿名身份验证(Blaze 套餐取消此限制)。电子邮件/电话和 OAuth 身份验证没有限制。对于电话验证,Spark 每月提供 1 万次验证,Blaze — 按使用量付费(用完 1 万次后每次验证 $0.01)。这使得 Firebase Auth 成为市场上最经济的解决方案之一。

Firebase Auth 身份验证提供商

Firebase Auth 开箱即用地支持 12 个身份验证提供商。每个提供商都作为独立的身份服务实现,具有预定义的流程 — 开发人员只需创建 Credential 对象并将其传递给 signInWithCredential。Firebase 自动判断用户是新人还是已有用户,如果电子邮件重复,会建议关联账户。

电子邮件和密码

电子邮件/密码 — 基本的身份验证方法,密码哈希(bcrypt)存储在 Firebase 服务器上。支持注册、登录、通过电子邮件重置密码和确认电子邮件。Firebase 自动检查密码复杂度(至少 6 个字符),并可在 N 次失败尝试后阻止登录(防范暴力破解)。

社交提供商

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 完全支持带有 JWT 验证的 Apple Sign In 流程。

提供商协议需要 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 验证作为后备方案。电话身份验证对于必须绑定号码的应用至关重要 — 送餐、出租车、银行业务。

在 Android 中集成 Firebase Auth

连接 Firebase Auth 在 Android 上需要将 firebase-auth-ktx 依赖项添加到 build.gradle 并初始化 Firebase App(通过 Google Services 插件自动完成)。之后,FirebaseAuth 对象可通过静态方法 getInstance() 获取 — 整个应用程序的单例。无需额外配置。

groovy
// 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 中创建用户,并返回包含 UID 的 AuthResult 对象。如果具有此电子邮件的用户已存在,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,使用两步流程:通过 Credential Manager(Android)或 Google Sign-In SDK 获取 ID Token,然后将令牌传递给 Firebase credential。Firebase 在其自己的服务器上验证令牌(使用 Google 的 RSA 密钥检查签名),并创建或返回现有用户。该过程不需要在客户端存储密钥 — 整个身份验证通过令牌的加密验证完成。

用户和会话管理

Firebase Auth 自动管理会话的生命周期。登录后,SDK 将刷新令牌保存在本地存储中,并在每次应用重启时通过 signIn silently 恢复会话。开发者无需实现令牌存储、过期处理或刷新 — 所有这些都由 Firebase Auth SDK 完成。

当前用户

FirebaseAuth.getInstance().currentUser 如果会话活动则返回 FirebaseUser 对象,如果用户已退出则返回 null。FirebaseUser 包含 UID、电子邮件、displayName、photoUrl、phoneNumber、providerData 和声明列表。更新个人资料后(updateProfile),更改会自动与服务器同步。FirebaseUser 对象缓存在内存中,并在任何 auth 操作时更新。

匿名身份验证

signInAnonymously — 创建无需注册的临时用户。匿名用户拥有 UID,但没有电子邮件、姓名或提供商。这对于注册前内容可用的应用(购物车、收藏夹、历史记录)非常有用。当用户决定注册时,匿名账户通过 linkWithCredential 与永久账户关联。Spark 套餐每天限制 1 万次匿名身份验证。

根据 Google(2026),约 40% 的用户匿名开始使用应用,其中 25% 随后将匿名账户与永久账户关联。这意味着匿名身份验证在用户转换为注册用户时不会丢失数据。

退出和删除账户

signOut() 方法清除本地会话并删除保存的令牌。调用 signOut 后,currentUser 变为 null。delete() 方法完全从 Firebase Auth 中删除用户账户 — 所有关联的提供商被断开,对 Firebase 服务的访问被阻止。删除用户是不可逆的,需要重新身份验证(reauthenticate)以防止未经授权的账户删除。

自定义声明和角色管理

Custom Claims 是 Firebase Auth 添加到用户 JWT 令牌的自定义属性。与标准个人资料字段(电子邮件、displayName)不同,声明仅在服务器端可用 — 通过 Admin SDK 或通过 Firestore 和 Realtime Database 的 Firebase Security Rules 规则。声明对客户端不直接可见,但可通过 user.getIdTokenResult() 读取。

典型使用场景

角色和访问权限 — 声明最常见的应用场景。Admin SDK 允许通过服务器上的映射分配“admin”、“moderator”或“premium_user”角色。这些声明自动进入令牌,并可在 Firestore Security Rules 中用于区分访问权限。根据 Google(2026),65% 的 Firebase 项目使用自定义声明来管理数据访问,而不是使用单独的角色服务器。

kotlin
// Admin SDK (Node.js) — 为用户分配声明
const admin = require("firebase-admin")

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

// 在客户端读取声明
val claims = FirebaseAuth.getInstance()
    .currentUser?.getIdTokenResult(true)
    ?.await()?.claims

声明的限制

Custom claims 有限制:每个用户整个 JSON 声明对象最多 1000 字节,对象中不超过 20 个键。声明不用于存储动态数据 — 仅通过 Admin SDK 更新,且不实时同步。声明更新后,用户必须刷新令牌(getIdTokenResult(true))或重新登录应用。声明在客户端不被缓存 — 每次新登录都从服务器获取当前令牌。

身份验证安全

Firebase Auth 实现多层账户保护:流量加密(TLS 1.3)、密码哈希(bcrypt,成本 10)、通过 Adaptive Pricing 防范暴力破解(可疑活动时自动减慢响应)以及与 reCAPTCHA 集成用于 Web 登录。此外,Firebase Auth 在可疑活动时禁用账户 — 来自不同 IP 的批量登录、使用错误密码的登录尝试和可疑电子邮件地址。

保护方法

Account Lockout — 在特定次数登录失败后自动锁定账户。阈值可在 Firebase 控制台中配置(默认为 10 次尝试)。Email Enumeration Protection — 防范电子邮件地址枚举。启用后,Firebase 对存在和不存在的电子邮件返回相同的错误。Trusted Domains — 将登录限制为仅具有设置中指定的电子邮件域的用户。

自定义令牌安全

额外的自定义身份验证可以建立在 Custom Tokens 上 — 使用 Firebase 服务账户签名的 JWT。客户端将自定义令牌传递给 signInWithCustomToken(),Firebase 验证签名并创建会话。这允许将 Firebase Auth 与现有服务器身份验证(例如,自己的服务器的 OAuth 2.0)集成,而无需复制用户数据库。令牌有效期为 1 小时,之后 SDK 通过 Firebase 刷新令牌自动续期会话。

常见问题

Firebase Auth 需要多少费用?

Firebase Auth 在 Spark 和 Blaze 套餐中对所有提供商完全免费。限制:每天 1 万次匿名注册(Spark)和每月 1 万次 SMS 验证(Spark)。

如何将多个提供商关联到一个账户?

使用 linkWithCredential — 将新提供商关联到当前匿名或电子邮件用户的方法。用户通过 Google 登录,然后通过 linkWithCredential 关联电子邮件。

可以在没有互联网的情况下使用 Firebase Auth 吗?

Firebase Auth 需要互联网进行登录,但会在本地缓存会话。登录后,应用在离线模式下工作,直到需要刷新令牌(每小时一次)。

如何撤销用户的令牌?

在 Firebase 控制台中,转到 Authentication 部分,找到用户并单击“Revoke Tokens”。用户的所有活动会话将在 30 分钟内失效。

删除用户时会发生什么?

通过控制台或 Admin SDK 删除账户会立即阻止对所有 Firebase 服务的访问。令牌停止工作。Firestore、Realtime Database 和 Storage 中的数据不会自动删除。

总结

  • Firebase Auth — Google 云身份验证服务,具有适用于 Android、iOS 和 Web 的统一 SDK。
  • 开箱即用地支持 12 个提供商:电子邮件、电话、Google、Apple、Facebook、Twitter 等。
  • SDK 自动管理 JWT 令牌 — 存储、刷新、重启时恢复会话。
  • 通过 Admin SDK 的 Custom claims 允许实现基于角色的访问模型,无需单独的角色服务器。
  • 匿名身份验证提供临时 UID,可关联到永久账户。
  • Android 集成需要一个依赖项 firebase-auth-ktx,无需额外配置。
  • 该服务包括内置保护,防范暴力破解、电子邮件枚举和自动阻止可疑账户。

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读