Firebase Auth یک سرویس ابری Google برای احراز هویت کاربران در برنامههای موبایل و وب است که روشهای آماده ورود از طریق ایمیل، تلفن و شبکههای اجتماعی را ارائه میدهد. SDK چرخه کامل نشست را مدیریت میکند: ثبتنام، ورود، بهروزرسانی توکن و خروج. به گفته Google، 2026، Firebase Auth از بیش از 10 ارائهدهنده احراز هویت به صورت پیشفرض پشتیبانی میکند. این سرویس بدون محدودیت در تعداد کاربران احراز هویت شده به صورت رایگان ارائه میشود.
نکات مهم
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 Token) با payload حاوی UID، زمان صدور، زمان انقضا و claimهای سفارشی هستند. توکن دسترسی 1 ساعت و توکن بهروزرسانی نامحدود عمر میکند (اما میتوان از طریق 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 — پرداخت بر اساس مصرف (پس از اتمام 10 هزار، $0.01 برای هر تأیید). این 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 را به عنوان fallback پشتیبانی میکند. احراز هویت تلفنی برای برنامههایی با الزام اتصال به شماره — تحویل غذا، تاکسی، بانکداری حیاتی است.
اتصال Firebase Auth در Android نیاز به افزودن وابستگی firebase-auth-ktx به build.gradle و مقداردهی اولیه Firebase App (که به طور خودکار از طریق Google Services plugin انجام میشود) دارد. پس از آن، شی FirebaseAuth از طریق متد ایستا getInstance() در دسترس است — یک singleton برای کل برنامه. هیچ پیکربندی اضافی دیگری لازم نیست.
// 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 بررسی میکند) و کاربر موجود را ایجاد یا برمیگرداند. این فرآیند نیاز به ذخیره secret در کلاینت ندارد — تمام احراز هویت از طریق تأیید رمزنگاری توکنها انجام میشود.
Firebase Auth به طور خودکار چرخه حیات نشست را مدیریت میکند. پس از ورود، SDK توکن بهروزرسانی را در ذخیرهگاه محلی ذخیره میکند و در هر راهاندازی مجدد برنامه نشست را از طریق signIn silently بازیابی میکند. برنامهنویس نیازی به پیادهسازی ذخیره توکن، مدیریت انقضای آن یا بهروزرسانی ندارد — همه کارها را Firebase Auth SDK انجام میدهد.
FirebaseAuth.getInstance().currentUser اگر نشست فعال باشد شی FirebaseUser و اگر کاربر خارج شده باشد null برمیگرداند. FirebaseUser شامل UID، ایمیل، displayName، photoUrl، phoneNumber، providerData و فهرست claimها است. پس از بهروزرسانی پروفایل (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)، claimها فقط در سمت سرور — از طریق Admin SDK یا از طریق قوانین Firebase Security Rules برای Firestore و Realtime Database در دسترس هستند. claimها مستقیماً برای کلاینت قابل مشاهده نیستند، اما میتوان از طریق user.getIdTokenResult() آنها را خواند.
نقشها و مجوزهای دسترسی — رایجترین سناریوی استفاده از claimها. Admin SDK امکان تعیین نقش «admin»، «moderator» یا «premium_user» را از طریق map روی سرور فراهم میکند. این claimها به طور خودکار وارد توکن میشوند و میتوان از آنها در Firestore Security Rules برای محدود کردن دسترسی استفاده کرد. به گفته Google (2026)، 65٪ پروژههای Firebase به جای سرور نقش جداگانه از custom claims برای مدیریت دسترسی به دادهها استفاده میکنند.
// Admin SDK (Node.js) — تخصیص claimها به کاربر
const admin = require("firebase-admin")
await admin.auth().setCustomUserClaims(uid, {
role: "premium",
tier: "pro",
maxProjects: 50
})
// خواندن claimها در سمت کلاینت
val claims = FirebaseAuth.getInstance()
.currentUser?.getIdTokenResult(true)
?.await()?.claims
Custom claims محدودیتهایی دارند: حداکثر 1000 بایت برای کل شی JSON claims به ازای هر کاربر، حداکثر 20 کلید در شی. claimها برای ذخیره دادههای پویا طراحی نشدهاند — آنها فقط از طریق Admin SDK بهروزرسانی میشوند و در زمان واقعی همگام نمیشوند. پس از بهروزرسانی claimها، کاربر باید توکن را بهروزرسانی کند (getIdTokenResult(true)) یا دوباره وارد برنامه شود. claimها در سمت کلاینت کش نمیشوند — هر ورود جدید توکن جاری را از سرور دریافت میکند.
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 تجدید میکند.
سوالات متداول
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 از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید