IlmHamroh
JavaScript Full-stack/28-qism. Autentifikatsiya va backend xavfsizligi18/31-dars17 daqiqa
Mundarija (35)

Auth kutubxonalari va xizmatlari: Passport, Better Auth, Auth.js, Keycloak, Auth0 yoki o'zingiz yozasizmi

Qisqacha: Auth'ni uch yo'l bilan qurish mumkin. Birinchisi — o'zingiz yozasiz, kichik kriptografik kutubxonalar ustida (kanon yo'li: 1 470 qator, bitta prod bog'liqlik). Ikkinchisi — kutubxona: Passport, Better Auth, Auth.js — kod sizda, ma'lumot o'z bazangizda. Uchinchisi — xizmat: Keycloak (o'z serveringizda) yoki Auth0, Clerk, Supabase Auth (bulutda). Tanlov mezonlari — vaqt, nazorat, narx, ma'lumot qayerda turishi va jamoaning tajribasi. Lucia (2025-yil mart) eskirgan. Auth.js 2025-yil sentyabrdan Better Auth jamoasi qo'lida. Kanon kutubxonalar og'irligini o'lchadi: Better Auth — 30 paket / 20 MB, Passport — 4 paket / 263 KB.

Bu darsda

  • Auth yechimlarining to'rt toifasini va har birining narxini bilasiz.
  • Kanon o'lchagan bog'liqlik og'irligini o'qiy olasiz.
  • Passport strategiyasi, Better Auth plagini va SaaS xizmat qanday ishlashini tushuntirasiz.
  • Loyiha uchun mezonlar jadvalini tuzib, asosli tanlov qilasiz.
  • O'zimiz yozgan auth'ni tayyor yechimlar bilan halol solishtirasiz.

Oldin bilishingiz kerak: OAuth 2.0 va OpenID Connect nazariyasi, Session-based auth, Session vs JWT qarori va uzoq sessiyalar, Google bilan kirish.

28-qismning birinchi yarmida auth'ni o'zimiz yozdik: parol hash'i, ro'yxat va login, sessiya, CSRF, email havolalari, SMS kod, Google va Telegram. Ish ko'p bo'ldi. Tabiiy savol tug'iladi: real loyihada ham shunday qilinadimi? Javob: "ba'zan". Bu dars — qachon va nima uchun.

1. Nega bu kerak?

1.1 Kanonning narxi

Kanon o'z auth modulini sanadi (testlarsiz):

text
kanon auth moduli (src/auth/*.ts, test'siz): 1470 qator, prod bog'liqlik +1 (openid-client)

1 470 qator — 14 ta fayl: parol, sessiya, CSRF, tokenlar, SMS kod, OIDC, Telegram, ombor, xizmat va marshrut. Ularning har biri uchun testlar bor va har darsda kanon real zaiflik topdi. Masalan, parol tiklashda javob vaqti emailni oshkor qilgan edi. Bu kod yozilgandan keyin ham qo'llab-quvvatlanadi: yangi hujum turi, standart o'zgarishi, Telegram'ning yangi kirish usuli.

1.2 Nega baribir o'zimiz yozdik

Kursda maqsad — tushunish. Kutubxona signIn() funksiyasini beradi, lekin uning ichida nima borligini ko'rsatmaydi. Endi siz Better Auth yoki Auth0 hujjatini o'qiganingizda har atamani taniysiz: PKCE, state, __Host- cookie, rehash on login, pre-hijacking. Yaxshi tanlov qilish uchun ichini bilish kerak.

Production'da esa savol boshqacha qo'yiladi: "Bu kodni kim yozadi va 5 yil davomida kim qo'llab-quvvatlaydi?"

2. To'rt toifa

2.1 Xarita

Toifa Misollar Kod kimda Foydalanuvchilar bazasi
Primitivlar node:crypto, jose, openid-client, otplib, @simplewebauthn/server sizda sizda
Kutubxona / freymvork Passport, express-session, Better Auth, Auth.js sizda sizda
O'zingiz boshqaradigan IdP Keycloak alohida server, sizda uning bazasida
Bulut xizmati (SaaS) Auth0, Clerk, Supabase Auth, Firebase Auth xizmatda xizmatda

IdP (identity provider — kimlik provayderi) — foydalanuvchilarni o'zi saqlaydigan va boshqa ilovalarga OIDC orqali "bu — Aziz" deb aytadigan alohida tizim. Oldingi darslarda Google aynan shu rolda edi.

Pastga tushgan sari ikki narsa o'zgaradi. Siz kamroq kod yozasiz, lekin nazoratingiz ham kamayadi.

2.2 Qaror oqimi

flowchart TD
  S[Auth kerak] --> K{Bir nechta ilova bitta hisob bilan kiradimi?}
  K -->|ha| I{O'z serveringizda bo'lishi shartmi?}
  I -->|ha| KC[Keycloak kabi IdP]
  I -->|yo'q| SA[SaaS: Auth0, Clerk]
  K -->|yo'q| T{Jamoada auth tajribasi bormi?}
  T -->|ha, va maxsus talab bor| O[O'zingiz: primitivlar ustida]
  T -->|yo'q yoki vaqt kam| L[Kutubxona: Better Auth, Auth.js]

Bu — qat'iy qoida emas, birinchi savollar ro'yxati. Har loyihada narx, qonun va jamoa uni o'zgartiradi. Mezonlarni «Tanlov mezonlari» bo'limida batafsil ko'ramiz.

3. Kanon o'lchovi: bog'liqlik og'irligi

3.1 Qanday o'lchandi

Kanon har paketni alohida bo'sh papkaga o'rnatdi (npm i --omit=dev --ignore-scripts). Keyin node_modules dagi paketlar sonini va papka hajmini sanadi. Paketlar ishlatib ko'rilmadi — faqat "o'rnatish narxi" o'lchandi. Natija (npm 11.19.0, Node 24.21.0, 2026-10-28). Ikki ustunga qarang — paketlar soni va hajm:

text
paket                                          paketlar       hajm
passport@0.7.0                                        4       263K
passport-local@1.0.0                                  2        46K
express-session@1.19.0                               11       427K
better-auth@1.7.11                                   30        20M
@auth/express@0.12.3                                 80        11M
jose@6.2.12                                           1       398K
openid-client@6.8.8                                   3       984K
oidc-provider@9.12.2                                 40       2.9M
@simplewebauthn/server@14.0.3                        33       5.9M
otplib@13.5.0                                         9       2.7M
argon2@0.45.1                                        12       1.8M

Nima bo'ldi? Eng yengili — Passport (4 paket), eng og'ir — Better Auth (20 MB) va @auth/express (80 paket). "Paketlar" — o'zi bilan birga o'rnatilgan hamma paket (tranzitiv bog'liqliklar ham). "Hajm" — du -sh chiqishi: K — kilobayt, M — megabayt.

3.2 Rasmda

O'rnatilgan hajm (node_modules, --omit=dev)
  • passport4 paket0,26 MB
  • express-session11 paket0,42 MB
  • openid-client3 paket0,96 MB
  • argon212 paket1,8 MB
  • @simplewebauthn/server33 paket5,9 MB
  • @auth/express80 paket11 MB
  • better-auth30 paket20 MB

Manba: kanon o'lchovi (IlmHamroh, 2026-10): npm 11.19.0, Node 24.21.0, har paket bo'sh papkada, du -sh, 2026-10-28

Kilobaytlarni megabaytga o'tkazdik (263K ≈ 0.26 MB). Uch narsaga qarang:

  • Passport — juda kichik. U faqat "strategiya chaqirish" mexanizmi. Parol hash'i, sessiya bazasi, CSRF — hammasi sizda qoladi.
  • Better Auth — eng og'ir, lekin ichida ko'p narsa bor: parol, sessiya, OAuth provayderlari, plaginlar.
  • @auth/express — 80 paket. Har paket — kelajakda yangilash va xavfsizlik e'loni chiqishi mumkin bo'lgan yana bitta joy.

Hajmning o'zi yomonlik emas: serverda 20 MB sezilmaydi. Muhimi — ta'minot zanjiri (supply chain). 80 paketning birortasiga zararli versiya chiqsa, u sizning serveringizda ishlaydi. Kanonning "7 kun qoidasi" (yangi versiya chiqqandan keyin bir hafta kutish) aynan shuning uchun. OAuth 2.0 va OpenID Connect nazariyasi darsida jose shu qoida bilan qotirilgan edi.

3.3 Raqamlar bilan ishlash

Xom satrlarni o'zingiz qayta ishlab ko'ring:

js
// kanon o'lchovidan (paket, paketlar soni, hajm) — xom satrlar
const XOM = `passport@0.7.0 4 263K
express-session@1.19.0 11 427K
better-auth@1.7.11 30 20M
@auth/express@0.12.3 80 11M
openid-client@6.8.8 3 984K
@simplewebauthn/server@14.0.3 33 5.9M
argon2@0.45.1 12 1.8M`;

function kbga(hajm) {
  const son = Number.parseFloat(hajm);
  return hajm.endsWith("M") ? son * 1024 : son;
}

const qatorlar = XOM.split("\n").map((q) => {
  const [paket, soni, hajm] = q.split(" ");
  return { paket, soni: Number(soni), kb: kbga(hajm) };
});

const tartib = qatorlar.toSorted((a, b) => b.kb - a.kb);
for (const q of tartib.slice(0, 3)) {
  const kb = String(Math.round(q.kb)).padStart(6);
  console.log(q.paket.padEnd(30), kb, "KB", q.soni, "paket");
}

const [katta] = tartib;
const passport = qatorlar.find((q) => q.paket.startsWith("passport"));
console.log("farq:", Math.round(katta.kb / passport.kb), "marta");

Konsolda:

text
better-auth@1.7.11              20480 KB 30 paket
@auth/express@0.12.3            11264 KB 80 paket
@simplewebauthn/server@14.0.3    6042 KB 33 paket
farq: 78 marta

toSorted — asl massivni o'zgartirmaydi (Nusxa bilan o'zgartirish: toSorted). Number.parseFloat("5.9M") — boshidagi sonni oladi va M da to'xtaydi. Better Auth Passport'dan 78 marta og'ir — lekin u 78 marta ko'p ish ham qiladi.

4. Kutubxonalar

4.1 Passport

Passport — Node.js uchun eng eski auth kutubxonalaridan biri (passport 0.7.0). Rasmiy sahifasi o'zini "Node.js uchun autentifikatsiya middleware'i" deb ataydi va "500+ strategiya" borligini aytadi (2026-10-28 da o'qildi).

Strategiya (strategy) — bitta kirish usulining moduli: passport-local (email va parol), passport-google-oauth20, passport-jwt va boshqalar. Siz strategiyaga "foydalanuvchini qanday topish va tekshirish" funksiyasini berasiz. Passport esa so'rovni shu strategiya orqali o'tkazadi va natijani req.user ga qo'yadi.

Passport nima qilmaydi: parolni hash'lamaydi, sessiyani bazada saqlamaydi, CSRF'dan himoya qilmaydi, pre-hijacking'ni bilmaydi. Bularning hammasi — sizda, ya'ni kanonda yozganlarimizning ko'pchiligi. Passport'ning foydasi — standart "ulash nuqtasi". NestJS'da u asosiy auth usuli; buni 30-qismda ko'ramiz.

4.2 Better Auth

Better Auth — o'z hujjatida "TypeScript uchun freymvorkga bog'liq bo'lmagan, universal autentifikatsiya va avtorizatsiya freymvorki" deb ta'riflangan (2026-10-28 da o'qildi). U tayyor imkoniyatlar to'plamini va plaginlar ekotizimini beradi: ikki faktorli autentifikatsiya, passkey, ko'p tashkilotli (multi-tenant) ilovalar, SSO. Kod va foydalanuvchilar jadvali sizning loyihangizda qoladi.

Kanon o'lchovi: better-auth 1.7.11 — 30 paket, 20 MB. Darsni yozish kuni npm'dagi oxirgi versiya — 1.7.14, ya'ni loyiha juda faol: haftasiga bir necha reliz. Bu yaxshi tomoni ham (xatolar tez tuzatiladi), qiyin tomoni ham (tez-tez yangilash kerak).

4.3 Auth.js va Lucia: ekotizim o'zgarmoqda

Auth (va umuman frontend) kutubxonalari dunyosi tez o'zgaradi. 2025–2026-yillardagi uch voqea (rasmiy sahifalar, 2026-10-28 da o'qildi):

  • Auth.js (avvalgi NextAuth.js) — 2025-yil 22-sentabrda Better Auth jamoasiga o'tdi. E'londa yozilishicha, mavjud foydalanuvchilar uni ishlataverishi mumkin: xavfsizlik yamoqlari va shoshilinch tuzatishlar chiqadi. Yangi loyihalarga esa Better Auth tavsiya qilinadi, faqat Auth.js'dagi maxsus imkoniyat kerak bo'lsa bundan mustasno. Masalan, bazasiz (stateless) sessiya. Kanon Auth.js'ni Next.js loyihasida alohida tajriba qiladi — Autentifikatsiya I: Auth.js (NextAuth v5).
  • Lucia — 2025-yil martda eskirgan (deprecated). Sahifasida npm paketining o'rniga bitta faylli tayyor kod va "Auth Book" o'quv materialiga havola bor. Ya'ni Lucia endi kutubxona emas, o'qish materiali.
  • Arctic (Lucia muallifining OAuth mijozlari kutubxonasi) — 2026-yil iyulida eskirgan, deb yozilgan.

Xulosa: kutubxona tanlashda uning holatini tekshiring — oxirgi reliz, egasi, "deprecated" e'loni. Ikki yil oldingi maqoladagi "eng yaxshi tanlov" bugun eskirgan bo'lishi mumkin.

Tekshirib ko'ring: Loyihangizda Lucia ishlatilgan. U eskirgani uchun ertaga sayt buziladimi?

Javob

Yo'q. Eskirgan kutubxona ishlashda davom etadi — kod sizning node_modules ingizda. Xavf boshqa joyda: yangi zaiflik topilsa, tuzatish chiqmaydi. Lucia muallifi uning o'rniga bitta faylli kod taklif qilgan — bu kod sizning loyihangizga ko'chadi va endi uni siz qo'llab-quvvatlaysiz. Rejali ko'chish kerak, shoshilinch emas.

5. Xizmatlar

5.1 Keycloak: o'z serveringizda IdP

Keycloak — ochiq manbali "identifikatsiya va kirishni boshqarish" (IAM) serveri, Cloud Native Computing Foundation'ning inkubatsiya loyihasi (keycloak.org, 2026-10-28 da o'qildi). U OpenID Connect, OAuth 2.0 va SAML'ni qo'llaydi. Mavjud LDAP yoki Active Directory bilan ulana oladi. Ijtimoiy tarmoqlar orqali kirishni ilova kodini o'zgartirmasdan, admin panelidan yoqadi.

Keycloak sizning ilovangiz uchun "o'z Google'ingiz" bo'ladi. Ilovalar unga oldingi darsdagi Oidc klassi bilan ulanadi — oddiy OIDC provayder sifatida. Bu kompaniyada o'nta ichki tizim bo'lganda juda qulay: xodim bitta hisob bilan hammasiga kiradi. Narxi — yana bitta jiddiy server: Java ilovasi, o'z bazasi, yangilanishlar, zaxira nusxa.

5.2 Bulut xizmatlari

Auth0, Clerk, Supabase Auth, Firebase Auth — auth'ni to'liq xizmat sifatida beradi: kirish sahifasi, foydalanuvchilar bazasi, ijtimoiy kirish, MFA, admin panel. Siz SDK ulaysiz va ular bergan token yoki sessiyani tekshirasiz. Tashqi login va SMS kod bilan kirish UI darsida ularning frontend tomonini ko'rgansiz.

Kanon ularni sinamadi — hisob ochish kerak bo'lardi. Umumiy afzallik va xavflar:

Afzallik Xavf
birinchi kundan ishlaydi foydalanuvchilar ma'lumoti xizmat serverida
MFA, passkey, anomaliyalarni aniqlash tayyor narx foydalanuvchi soni bilan o'sadi
xavfsizlik jamoasi — ularniki ko'chish qiyin (lock-in)
SOC 2 kabi sertifikatlar mahalliy provayderlar (OneID) — o'zingiz

Ikki joyga alohida e'tibor bering. Birinchisi — ma'lumot joyi: O'zbekiston qonunidagi saqlash talablarini Managed va serverless Postgres darsida ko'rgansiz. Ikkinchisi — ko'chish: parol hash'lari xizmatda saqlanadi. Xizmatdan chiqmoqchi bo'lsangiz, ular hash'larni bera oladimi va qaysi formatda — bu shartnoma va hujjat savoli. Oldin bilib qo'ying.

5.3 Supabase va BaaS

Supabase Auth — kengroq BaaS (Backend as a Service) platformasining qismi. U yerda auth bazaning qator darajasidagi xavfsizligi (RLS) bilan bevosita bog'langan. Bu — alohida yondashuv: 29-qismda ko'rgansiz (Tayyor backend'lar: BaaS va headless CMS).

6. Tanlov mezonlari

6.1 Jadval

Mezon Savol
Vaqt birinchi versiya qachon kerak?
Nazorat maxsus oqim kerakmi (OneID, Telegram, pre-hijacking qoidasi)?
Narx 10 000 / 100 000 faol foydalanuvchida oyiga qancha?
Ma'lumot joyi foydalanuvchilar bazasi qayerda turadi, qonun nima deydi?
Jamoa auth xatosini kim topadi va tuzatadi?
Ko'chish ertaga boshqasiga o'tish qanchalik qiyin?
Holat kutubxona yoki xizmat faolmi, kim qo'llab-quvvatlaydi?

6.2 Qachon o'zingiz yozasiz

O'zingiz yozish oqlanadigan holatlar:

  • maxsus talablar — mahalliy provayderlar (OneID, Telegram), nostandart sessiya qoidalari, maxsus audit jurnali;
  • ma'lumot joyi qat'iy va tayyor xizmat unga mos kelmaydi;
  • jamoada auth va kriptografiya tajribasi bor, testlar va xavfsizlik ko'rigi qilinadi;
  • o'rganish — bu kursdagidek.

Lekin "o'zingiz yozish" — noldan kriptografiya yozish degani emas. Kanon ham argon2, HMAC, AES'ni o'zi ixtiro qilmadi: Node crypto dan oldi. OIDC protokolini ham qo'lda yozmadi: openid-client dan oldi. Yaxshi qoida: protokol va kriptografiya — tekshirilgan kutubxonadan, biznes qoidalari — o'zingizdan.

6.3 Qachon yozmaysiz

  • startap, birinchi versiya bir oyda kerak, jamoa ikki kishi — kutubxona yoki SaaS;
  • o'nlab ichki ilova, bitta xodim hisobi — IdP (Keycloak yoki SaaS);
  • korporativ mijozlar SAML va SSO so'raydi — tayyor yechimda bor, o'zingiz yozish oylab vaqt oladi.

Tekshirib ko'ring: Jamoa Passport ishlatadi. "Auth'ni kutubxonaga topshirdik, xavfsizlik — Passport'ning ishi" degan gap to'g'rimi?

Javob

Yo'q. Passport faqat strategiyani chaqiradi. Parol qanday saqlanishi, sessiya, CSRF, tezlik cheklovi, email bilan bog'lash qoidalari — bularning hammasi baribir jamoaniki. Passport bilan ham kanondagi deyarli hamma darsni bajarish kerak. "Kutubxona hammasini qiladi" degan fikr Better Auth yoki SaaS uchun ham to'liq to'g'ri emas — sozlash va biznes qoidalari doim sizda.

7. Hujumchi nigohi

Hujum Qayerda Himoya
zararli bog'liqlik versiyasi ko'p paketli kutubxona 7 kun qoidasi, npm audit, qotirilgan versiyalar
eskirgan kutubxonadagi tuzatilmagan zaiflik Lucia, eski Passport strategiyalari holatni muntazam tekshirish, ko'chish rejasi
noto'g'ri sozlangan SaaS (ochiq ro'yxatdan o'tish, zaif parol siyosati) Auth0, Clerk sozlamalari sozlamalarni kod sifatida saqlash, ko'rik
xizmat bergan tokenni tekshirmaslik SaaS bilan backend imzo, aud, iss — xuddi id_token kabi
IdP serveri ochiq qolgan admin panel Keycloak admin panel faqat ichki tarmoqdan

Tayyor yechim hujum yuzasini yo'qotmaydi, uni boshqa joyga ko'chiradi. O'zingiz yozgan kodda zaiflik — sizning kodingizda. Tayyor yechimda — sozlamada, bog'liqlikda yoki integratsiyada.

8. Ko'p uchraydigan xatolar

Xato Nega xato To'g'risi
"eng mashhurini" tanlash, holatiga qaramay eskirgan bo'lishi mumkin oxirgi reliz, egasi, e'lonlar
kriptografiyani noldan yozish xato deyarli muqarrar Node crypto, tekshirilgan kutubxona
SaaS'da ko'chish yo'lini o'ylamaslik lock-in hash eksporti, standart OIDC
kutubxona "hammasini qiladi" deb o'ylash sozlash va qoidalar sizda hujjatdagi xavfsizlik bo'limini o'qish
narxni bugungi foydalanuvchi soni bilan hisoblash o'sganda qimmatlashadi 10× o'sishda hisob
har ilovada alohida hisob foydalanuvchi o'nta parol eslaydi IdP, SSO

9. Mashqlar

Mashqlar kurs/mashqlar/28/18-kutubxonalar/ da.

1-mashq (oson): qaysi toifa?

Har loyihaga to'rt toifadan birini tanlang (o'zingiz, kutubxona, IdP, SaaS) va bir gap bilan asoslang:

  1. Ikki kishilik startap, MVP uch haftada kerak, Next.js.
  2. Bankda 15 ta ichki tizim, xodimlar bitta login bilan kirishi kerak, ma'lumot bankdan chiqmasin.
  3. Davlat xizmatlari portali: OneID majburiy, boshqa usul yo'q.
  4. Dasturlash kursi: talabalar auth qanday ishlashini o'rganishi kerak.
Yechim
  1. Kutubxona (Better Auth) yoki SaaS — vaqt eng muhim mezon; ma'lumotni o'z bazangizda saqlash muhim bo'lsa — kutubxona.
  2. IdP (Keycloak, o'z serverlarida) — ko'p ilova, bitta hisob, ma'lumot ichkarida.
  3. O'zingiz (adapter) — nostandart mahalliy provayder; tayyor yechimlarda OneID yo'q (biz tekshirmadik — rasmiy ro'yxatlarini ko'ring). Protokolning o'zi — rasmiy hujjat bo'yicha.
  4. O'zingiz — maqsad tushunish; kanon aynan shunday qildi.

2-mashq (o'rta): vaznli mezonlar jadvali

Uch variantni to'rt mezon bo'yicha baholang (1–5, kattasi yaxshi): vaqt, nazorat, narx, ma'lumot joyi. Mezonlarning og'irligi (muhimligi): vaqt 3, nazorat 2, narx 2, ma'lumot joyi 3. jamiBall(b) funksiyasi har mezon ballini og'irligiga ko'paytirib qo'shsin. Natijani kamayish tartibida chiqaring. Ishora: Object.entries va reduce (reduce: massivni bitta qiymatga yig'ish), toSorted (Nusxa bilan o'zgartirish: toSorted).

Yechim
js
const OGIRLIK = { vaqt: 3, nazorat: 2, narx: 2, malumotJoyi: 3 };

// 1–5 ball: kattasi yaxshi. Ballar — namuna (sizning loyihangizda
// boshqacha bo'ladi)
const VARIANTLAR = [
  { nom: "o'zimiz yozamiz",
    b: { vaqt: 1, nazorat: 5, narx: 4, malumotJoyi: 5 } },
  { nom: "kutubxona (Better Auth)",
    b: { vaqt: 4, nazorat: 4, narx: 5, malumotJoyi: 5 } },
  { nom: "SaaS xizmat",
    b: { vaqt: 5, nazorat: 2, narx: 2, malumotJoyi: 2 } },
];

function jamiBall(b) {
  return Object.entries(OGIRLIK)
    .reduce((s, [mezon, w]) => s + w * b[mezon], 0);
}

const natija = VARIANTLAR
  .map((v) => ({ nom: v.nom, ball: jamiBall(v.b) }))
  .toSorted((a, b) => b.ball - a.ball);
for (const n of natija) console.log(`${n.ball} — ${n.nom}`);

Konsolda:

text
45 — kutubxona (Better Auth)
36 — o'zimiz yozamiz
29 — SaaS xizmat

Ballar namuna — sizning loyihangizda boshqacha bo'ladi. Jadvalning foydasi raqamda emas, muhokamada. Jamoa og'irliklar ustida bahslashadi: "biz uchun vaqt muhimmi yoki ma'lumot joyi?". Shu bahs qarorni ongli qiladi. OGIRLIK dagi vaqt ni 6 ga ko'tarib ko'ring — tartib o'zgaradimi?

3-mashq (qiyin): qachon SaaS qimmatroq?

Ikki o'ylab topilgan tarif bor (real xizmat narxi emas). SaaS: 10 000 faol foydalanuvchigacha bepul, keyin oyiga 25 $ va har boshlangan 1 000 foydalanuvchiga +2 $. O'zingiz: server 20 $, xodimning oyiga 4 soati (soati 15 $) va har boshlangan 50 000 foydalanuvchiga +10 $. saasNarx(mau) va oziNarx(mau) ni yozing, 5 000, 20 000, 50 000 va 100 000 uchun chiqaring. Keyin 10 000 dan boshlab 1 000 qadam bilan SaaS birinchi marta qimmatroq bo'ladigan nuqtani toping. Ishora: Math.ceil — yuqoriga yaxlitlash; while sikli (while va do...while).

Yechim
js
// O'YLAB TOPILGAN tariflar — faqat mashq uchun, real narx emas
function saasNarx(mau) {
  const bepul = 10_000;
  if (mau <= bepul) return 0;
  return 25 + Math.ceil((mau - bepul) / 1_000) * 2;
}

function oziNarx(mau) {
  const server = 20;
  const xodimSoati = 4 * 15;
  return server + xodimSoati + Math.ceil(mau / 50_000) * 10;
}

for (const mau of [5_000, 20_000, 50_000, 100_000]) {
  console.log(String(mau).padStart(7), saasNarx(mau), oziNarx(mau));
}

let chegara = 10_000;
while (saasNarx(chegara) <= oziNarx(chegara)) chegara += 1_000;
console.log("SaaS qimmatroq bo'ladi:", chegara);

Konsolda:

text
   5000 0 90
  20000 45 90
  50000 105 90
 100000 205 100
SaaS qimmatroq bo'ladi: 43000

Kichik loyihada SaaS bepul, o'zingiz esa baribir xodim vaqtini to'laysiz. O'sish bilan chiziqlar kesishadi. Bu modelda — taxminan 43 000 foydalanuvchida. Real hisobda yana ko'p narsa bor: dastlabki yozish vaqti (bizda 1 470 qator), xavfsizlik ko'rigi, SaaS'ning MFA yoki SMS uchun alohida narxi. Shuning uchun real tarifni xizmat sahifasidan oling va hisobni 10 barobar o'sish uchun ham qiling.

10. Loyiha qadami: tajriba, kod o'zgarmaydi

10.1 Kanon tajribasi va qarori

Bu darsda vazifalar-api ga yangi kod qo'shilmaydi. Kanon tajribasi — yuqoridagi o'lchov. Better Auth, Auth.js, Passport, Keycloak, Auth0, Clerk va Supabase Auth ishlatib ko'rilmadi: ba'zilariga hisob yoki servis kerak, ba'zilari kanon arxitekturasiga zid (o'z sessiya jadvali va cookie'si). Kanon qarori o'zgarmaydi: o'rganish maqsadida o'zimiz yozgan modul, protokol va kriptografiya — node:crypto va openid-client dan.

10.2 Holat

vazifalar-api da to'rtta kirish usuli bor: parol, SMS kod, Google va Telegram. OneID darsi ham, bu dars ham kodga hech narsa qo'shmadi. Keyingi darsda kirish ustiga ikkinchi qatlam qo'shamiz.

11. Real ishda

  • Startaplarda ko'pincha SaaS yoki Better Auth bilan boshlanadi. Foydalanuvchilar ko'paygach yoki maxsus talab chiqqach, o'z yechimiga yoki IdP'ga o'tiladi. Ko'chishni oson qilish uchun foydalanuvchini doim o'z bazangizdagi ID bilan saqlang, xizmat ID'si — tashqi_hisoblar dagidek alohida ustunda.
  • Korporativ muhitda Keycloak yoki shunga o'xshash IdP — odatiy narsa. Dasturchi ko'pincha IdP'ni o'zi yozmaydi, unga OIDC orqali ulanadi — oldingi darslardagi kod aynan shu.
  • Intervyuda: "Auth'ni o'zingiz yozasizmi yoki tayyorini olasizmi — nega?", "Passport nima qiladi va nima qilmaydi?", "Auth0 dan chiqmoqchi bo'lsangiz nima qilasiz?", "Kutubxona holatini qanday tekshirasiz?".

Xulosa

  • To'rt toifa: primitivlar, kutubxona (Passport, Better Auth, Auth.js), o'zingiz boshqaradigan IdP (Keycloak), SaaS (Auth0, Clerk, Supabase Auth).
  • Kanon o'lchovi: Passport — 4 paket / 263 KB, Better Auth — 30 / 20 MB, @auth/express — 80 / 11 MB; kanonning o'z moduli — 1 470 qator, +1 prod bog'liqlik.
  • Ekotizim o'zgaradi: Lucia (2025-03) va Arctic (2026-07) eskirgan, Auth.js — Better Auth jamoasida (2025-09).
  • Tanlov mezonlari: vaqt, nazorat, narx, ma'lumot joyi, jamoa, ko'chish, holat — vaznli jadval bilan muhokama.
  • "O'zingiz yozish" — protokol va kriptografiya tekshirilgan kutubxonadan, biznes qoidalari o'zingizdan.
  • Tayyor yechim hujum yuzasini yo'qotmaydi — sozlama va bog'liqliklarga ko'chiradi.

Keyingi dars: Ikki faktorli autentifikatsiya va passkeys — parolga ikkinchi qatlam: TOTP ilovalari, zaxira kodlar va parolsiz passkey (WebAuthn).

Manbalar

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
Auth kutubxonalari va xizmatlari: Passport, Better Auth, Auth.js, Keycloak, Auth0 yoki o'zingiz yozasizmi — IlmHamroh