Firebase Auth là dịch vụ đám mây của Google dành cho xác thực người dùng trong các ứng dụng di động và web, cung cấp các phương thức đăng nhập có sẵn qua email, điện thoại và mạng xã hội. SDK quản lý toàn bộ vòng đời phiên: đăng ký, đăng nhập, làm mới mã thông báo và đăng xuất. Theo Google, 2026, Firebase Auth hỗ trợ hơn 10 nhà cung cấp xác thực ngay khi sử dụng. Dịch vụ này hoàn toàn miễn phí, không giới hạn số lượng người dùng đã xác thực.
Điểm chính
Firebase Auth là dịch vụ xác thực backend của Google được cung cấp như một phần của Firebase SDK. Nó xử lý tất cả logic quản lý tài khoản phía máy chủ: lưu trữ hàm băm mật khẩu, tạo mã thông báo JWT và xử lý luồng OAuth 2.0 và OpenID Connect. Nhà phát triển không cần triển khai máy chủ xác thực riêng, quản lý mã thông báo làm mới hoặc triển khai giao thức xác minh — Firebase làm tất cả.
Firebase Auth sử dụng kiến trúc liên kết với kho lưu trữ người dùng hợp nhất. Mỗi người dùng nhận được một định danh duy nhất (UID) không phụ thuộc vào nhà cung cấp đăng nhập. Khi đăng ký qua Google và email, một người dùng duy nhất được tạo với hai tài khoản được liên kết (nhà cung cấp). Firebase tự động xử lý việc liên kết tài khoản phía máy khách mà không cần yêu cầu bổ sung đến máy chủ.
Mã thông báo Firebase Auth là JWT (JSON Web Token) với tải trọng chứa UID, thời gian phát hành, thời gian hết hạn và claims tùy chỉnh. Mã thông báo truy cập có thời hạn 1 giờ, mã thông báo làm mới không giới hạn (nhưng có thể bị thu hồi qua Bảng điều khiển Quản trị). SDK tự động làm mới mã thông báo trên mọi yêu cầu HTTP đến dịch vụ Firebase. Theo Google (2026), Firebase Auth xử lý hơn 500 triệu lượt xác thực mỗi ngày.
Firebase Auth hoàn toàn miễn phí trên gói Spark (miễn phí) và gói Blaze (trả tiền theo mức sử dụng). Giới hạn duy nhất là 10 nghìn lượt xác thực ẩn danh mỗi ngày trên Spark (không giới hạn trên Blaze). Xác thực email/điện thoại và OAuth không có giới hạn. Đối với xác minh qua điện thoại, Spark cung cấp 10 nghìn lần xác minh mỗi tháng, trong khi Blaze tính phí theo mức sử dụng ($0,01 mỗi lần xác minh sau 10 nghìn lần đầu tiên). Điều này làm cho Firebase Auth trở thành một trong những giải pháp hợp lý nhất trên thị trường.
Firebase Auth hỗ trợ 12 nhà cung cấp xác thực ngay khi sử dụng. Mỗi nhà cung cấp được triển khai như một dịch vụ định danh riêng biệt với luồng được xác định trước — nhà phát triển chỉ cần tạo một đối tượng Credential và chuyển nó đến signInWithCredential. Firebase tự động xác định người dùng là mới hay đã tồn tại và trong trường hợp trùng lặp email, đề xuất liên kết tài khoản.
Email/Password là phương thức xác thực cơ bản với hàm băm mật khẩu (bcrypt) được lưu trữ trên máy chủ Firebase. Nó hỗ trợ đăng ký, đăng nhập, đặt lại mật khẩu qua email và xác nhận email. Firebase tự động kiểm tra độ mạnh của mật khẩu (tối thiểu 6 ký tự) và có thể chặn đăng nhập sau N lần thất bại (bảo vệ khỏi tấn công brute-force).
Google, Apple, Facebook, Twitter, Microsoft, Yahoo, GitHub — tất cả nhà cung cấp OAuth 2.0 có thể được cấu hình qua bảng điều khiển Firebase trong 5 phút. Đối với mỗi nhà cung cấp, bạn cần lấy Client ID và Client Secret từ bảng điều khiển của chính nhà cung cấp đó. Apple Sign In là bắt buộc đối với ứng dụng App Store (yêu cầu của Apple từ năm 2020). Firebase Auth hỗ trợ đầy đủ luồng Apple Sign In với xác minh JWT.
| Nhà cung cấp | Giao thức | Yêu cầu Client Secret |
|---|---|---|
| OAuth 2.0 | Không | |
| Apple | OAuth 2.0 + OpenID | Có |
| OAuth 2.0 | Có | |
| OAuth 1.0a | Có | |
| GitHub | OAuth 2.0 | Có |
Phone Auth là xác thực qua mã SMS được gửi đến số điện thoại của người dùng. Firebase sử dụng Silent APN (iOS) hoặc SMS Retriever API (Android) để tự động đọc mã mà không cần nhập từ bàn phím. Trên Android, SMS Retriever API chỉ hoạt động trên các thiết bị có Google Play Services. Đối với các khu vực không có SMS, Firebase hỗ trợ xác minh reCAPTCHA như một phương án dự phòng. Xác thực qua điện thoại rất quan trọng đối với các ứng dụng yêu cầu liên kết số điện thoại — giao đồ ăn, đặt xe, ngân hàng.
Thêm Firebase Auth trên Android yêu cầu thêm dependency firebase-auth-ktx trong build.gradle và khởi tạo Firebase App (được thực hiện tự động qua plugin Google Services). Sau đó, đối tượng FirebaseAuth có sẵn thông qua phương thức tĩnh getInstance() — một singleton cho toàn bộ ứng dụng. Không cần cấu hình bổ sung.
// 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")
}
createUserWithEmailAndPassword là phương thức chính để đăng ký. Nó nhận email và mật khẩu, tạo người dùng trong Firebase Auth và trả về đối tượng AuthResult với UID. Nếu người dùng với email này đã tồn tại, Firebase trả về lỗi ERROR_EMAIL_ALREADY_IN_USE. Sau khi đăng ký thành công, SDK tự động lưu mã thông báo trong SharedPreferences và khôi phục phiên ở lần khởi động ứng dụng tiếp theo mà không cần gọi 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)
}
}
}
Đối với Google Sign In, quy trình hai bước được sử dụng: lấy ID Token qua Credential Manager (Android) hoặc Google Sign-In SDK, sau đó chuyển mã thông báo đến thông tin xác thực Firebase. Firebase xác minh mã thông báo trên máy chủ của mình (kiểm tra chữ ký bằng khóa RSA của Google) và tạo hoặc trả về người dùng hiện có. Quy trình không yêu cầu lưu trữ bí mật trên máy khách — tất cả xác thực được thực hiện thông qua xác minh mã thông báo mật mã.
Firebase Auth tự động quản lý vòng đời phiên. Sau khi đăng nhập, SDK lưu mã thông báo làm mới trong bộ nhớ cục bộ và mỗi khi ứng dụng khởi động lại, khôi phục phiên qua đăng nhập im lặng. Nhà phát triển không cần triển khai lưu trữ mã thông báo, xử lý hết hạn hoặc làm mới — Firebase Auth SDK làm tất cả.
FirebaseAuth.getInstance().currentUser trả về đối tượng FirebaseUser nếu phiên đang hoạt động hoặc null nếu người dùng đã đăng xuất. FirebaseUser chứa UID, email, displayName, photoUrl, phoneNumber, providerData và danh sách claims. Sau khi cập nhật hồ sơ (updateProfile), các thay đổi được đồng bộ hóa tự động với máy chủ. Đối tượng FirebaseUser được lưu trong bộ nhớ đệm và được cập nhật trên mọi thao tác xác thực.
signInAnonymously tạo người dùng tạm thời mà không cần đăng ký. Người dùng ẩn danh có UID nhưng không có email, tên hoặc nhà cung cấp. Điều này hữu ích cho các ứng dụng nơi nội dung có sẵn trước khi đăng ký (giỏ hàng, yêu thích, lịch sử). Khi người dùng quyết định đăng ký, tài khoản ẩn danh được liên kết với tài khoản vĩnh viễn qua linkWithCredential. Trên gói Spark, có giới hạn 10 nghìn lượt xác thực ẩn danh mỗi ngày.
Theo Google (2026), khoảng 40% người dùng bắt đầu sử dụng ứng dụng một cách ẩn danh và 25% trong số đó sau đó liên kết tài khoản ẩn danh của họ với tài khoản vĩnh viễn. Điều này có nghĩa là xác thực ẩn danh không làm mất dữ liệu khi chuyển đổi người dùng thành người dùng đã đăng ký.
Phương thức signOut() xóa phiên cục bộ và loại bỏ mã thông báo đã lưu. Sau khi gọi signOut, currentUser trở thành null. Phương thức delete() xóa hoàn toàn tài khoản người dùng khỏi Firebase Auth — tất cả nhà cung cấp được liên kết bị ngắt kết nối và quyền truy cập vào dịch vụ Firebase bị chặn. Việc xóa người dùng là không thể đảo ngược và yêu cầu xác thực lại để bảo vệ khỏi việc xóa tài khoản trái phép.
Custom Claims là các thuộc tính tùy chỉnh mà Firebase Auth thêm vào mã thông báo JWT của người dùng. Không giống như các trường hồ sơ tiêu chuẩn (email, displayName), claims chỉ khả dụng ở phía máy chủ — thông qua Admin SDK hoặc thông qua các quy tắc trong Firebase Security Rules cho Firestore và Realtime Database. Claims không hiển thị trực tiếp với máy khách nhưng có thể được đọc qua user.getIdTokenResult().
Vai trò và quyền truy cập là trường hợp sử dụng phổ biến nhất của claims. Admin SDK cho phép chỉ định vai trò “admin”, “moderator” hoặc “premium_user” thông qua một bản đồ trên máy chủ. Các claims này tự động được bao gồm trong mã thông báo và có thể được sử dụng trong Firestore Security Rules để kiểm soát truy cập. Theo Google (2026), 65% dự án Firebase sử dụng claims tùy chỉnh để quản lý truy cập dữ liệu thay vì máy chủ vai trò riêng biệt.
// Admin SDK (Node.js) — gán claims cho người dùng
const admin = require("firebase-admin")
await admin.auth().setCustomUserClaims(uid, {
role: "premium",
tier: "pro",
maxProjects: 50
})
// Đọc claims trên máy khách
val claims = FirebaseAuth.getInstance()
.currentUser?.getIdTokenResult(true)
?.await()?.claims
Claims tùy chỉnh có giới hạn: tối đa 1000 byte cho toàn bộ đối tượng JSON claims trên mỗi người dùng, không quá 20 khóa trong đối tượng. Claims không được thiết kế để lưu trữ dữ liệu động — chúng chỉ được cập nhật qua Admin SDK và không đồng bộ hóa theo thời gian thực. Sau khi cập nhật claims, người dùng phải làm mới mã thông báo (getIdTokenResult(true)) hoặc đăng nhập lại vào ứng dụng. Claims không được lưu trong bộ nhớ đệm trên máy khách — mỗi lần đăng nhập mới đều nhận được mã thông báo cập nhật từ máy chủ.
Firebase Auth triển khai bảo vệ tài khoản đa lớp: mã hóa lưu lượng (TLS 1.3), băm mật khẩu (bcrypt, chi phí 10), bảo vệ brute-force với Adaptive Pricing (tự động làm chậm phản hồi khi có hoạt động đáng ngờ) và tích hợp reCAPTCHA cho đăng nhập web. Ngoài ra, Firebase Auth vô hiệu hóa tài khoản khi có hoạt động đáng ngờ — đăng nhập hàng loạt từ các IP khác nhau, cố gắng đăng nhập với mật khẩu sai và địa chỉ email đáng ngờ.
Account Lockout — tự động khóa tài khoản sau một số lần đăng nhập thất bại nhất định. Ngưỡng có thể cấu hình trong bảng điều khiển Firebase (mặc định là 10 lần). Email Enumeration Protection — bảo vệ chống liệt kê địa chỉ email. Khi được bật, Firebase trả về cùng một lỗi cho cả email tồn tại và không tồn tại. Trusted Domains — giới hạn đăng nhập chỉ cho người dùng có tên miền email được chỉ định trong cài đặt.
Xác thực tùy chỉnh bổ sung có thể được xây dựng bằng Custom Tokens — JWT được ký bởi tài khoản dịch vụ Firebase. Máy khách chuyển mã thông báo tùy chỉnh đến signInWithCustomToken(), Firebase xác minh chữ ký và tạo phiên. Điều này cho phép tích hợp Firebase Auth với xác thực phía máy chủ hiện có (ví dụ: máy chủ OAuth 2.0 của riêng bạn) mà không cần sao chép cơ sở dữ liệu người dùng. Mã thông báo có thời hạn 1 giờ, sau đó SDK tự động làm mới phiên qua mã thông báo làm mới Firebase.
Câu hỏi thường gặp
Firebase Auth hoàn toàn miễn phí cho tất cả nhà cung cấp trên cả gói Spark và Blaze. Giới hạn: 10 nghìn đăng ký ẩn danh mỗi ngày (Spark) và 10 nghìn xác minh SMS mỗi tháng (Spark).
Sử dụng linkWithCredential — một phương thức liên kết nhà cung cấp mới với người dùng ẩn danh hoặc email hiện tại. Người dùng đăng nhập qua Google và sau đó liên kết email của họ qua linkWithCredential.
Firebase Auth yêu cầu internet để đăng nhập nhưng lưu phiên vào bộ nhớ đệm cục bộ. Sau khi đăng nhập, ứng dụng hoạt động ở chế độ ngoại tuyến cho đến khi cần làm mới mã thông báo (mỗi giờ một lần).
Trong bảng điều khiển Firebase, đi đến phần Authentication, tìm người dùng và nhấp vào “Revoke Tokens”. Tất cả phiên người dùng đang hoạt động sẽ trở nên không hợp lệ trong vòng 30 phút.
Xóa tài khoản qua bảng điều khiển hoặc Admin SDK ngay lập tức chặn quyền truy cập vào tất cả dịch vụ Firebase. Mã thông báo ngừng hoạt động. Dữ liệu trong Firestore, Realtime Database và Storage không bị xóa tự động.
Tóm tắt
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm