Mundarija (35)
- Bu darsda
- 1. Nega bu kerak?
- 1.1 Kanonning narxi
- 1.2 Nega baribir o'zimiz yozdik
- 2. To'rt toifa
- 2.1 Xarita
- 2.2 Qaror oqimi
- 3. Kanon o'lchovi: bog'liqlik og'irligi
- 3.1 Qanday o'lchandi
- 3.2 Rasmda
- 3.3 Raqamlar bilan ishlash
- 4. Kutubxonalar
- 4.1 Passport
- 4.2 Better Auth
- 4.3 Auth.js va Lucia: ekotizim o'zgarmoqda
- 5. Xizmatlar
- 5.1 Keycloak: o'z serveringizda IdP
- 5.2 Bulut xizmatlari
- 5.3 Supabase va BaaS
- 6. Tanlov mezonlari
- 6.1 Jadval
- 6.2 Qachon o'zingiz yozasiz
- 6.3 Qachon yozmaysiz
- 7. Hujumchi nigohi
- 8. Ko'p uchraydigan xatolar
- 9. Mashqlar
- 1-mashq (oson): qaysi toifa?
- 2-mashq (o'rta): vaznli mezonlar jadvali
- 3-mashq (qiyin): qachon SaaS qimmatroq?
- 10. Loyiha qadami: tajriba, kod o'zgarmaydi
- 10.1 Kanon tajribasi va qarori
- 10.2 Holat
- 11. Real ishda
- Xulosa
- Manbalar
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):
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:
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.8MNima 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
- 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:
// 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:
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 martatoSorted — 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:
- Ikki kishilik startap, MVP uch haftada kerak, Next.js.
- Bankda 15 ta ichki tizim, xodimlar bitta login bilan kirishi kerak, ma'lumot bankdan chiqmasin.
- Davlat xizmatlari portali: OneID majburiy, boshqa usul yo'q.
- Dasturlash kursi: talabalar auth qanday ishlashini o'rganishi kerak.
Yechim
- Kutubxona (Better Auth) yoki SaaS — vaqt eng muhim mezon; ma'lumotni o'z bazangizda saqlash muhim bo'lsa — kutubxona.
- IdP (Keycloak, o'z serverlarida) — ko'p ilova, bitta hisob, ma'lumot ichkarida.
- 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.
- 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
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:
45 — kutubxona (Better Auth)
36 — o'zimiz yozamiz
29 — SaaS xizmatBallar 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
// 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:
5000 0 90
20000 45 90
50000 105 90
100000 205 100
SaaS qimmatroq bo'ladi: 43000Kichik 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_hisoblardagidek 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
- Passport: https://passportjs.org (2026-10-28 da o'qildi)
- Better Auth hujjati: https://better-auth.com/docs/introduction; "Auth.js joins Better Auth" (2025-09-22): https://www.better-auth.com/blog/authjs-joins-better-auth (2026-10-28 da o'qildi)
- Auth.js: https://authjs.dev (2026-10-28 da o'qildi)
- Lucia (eskirgan, 2025-yil mart): https://lucia-auth.com (2026-10-28 da o'qildi)
- Arctic (eskirgan, 2026-yil iyul): https://arctic.pilcrowonpaper.com (2026-10-28 da o'qildi)
- Keycloak: https://www.keycloak.org (2026-10-28 da o'qildi)
- npm reestri (
npm view, 2026-10-28): better-auth 1.7.14, arctic 3.7.0, keycloak-js 26.2.5, openid-client 6.8.8 - Kanon o'lchovi (IlmHamroh, 2026-10): kutubxonalar og'irligi (npm 11.19.0, Node 24.21.0). Darsdagi brauzer misollari — biz ishga tushirdik.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!