Authentication — noldan boshlab
Hozirgacha yozgan API’miz hammaga ochiq edi: istalgan odam kitob qo‘shishi, o‘zgartirishi va o‘chirishi mumkin edi. Real ilovada bunday bo‘lmaydi. Server so‘rovni kim yuborganini bilishi kerak.
Bu bo‘limda foydalanuvchilarni tanish tizimini tayyor kutubxona yoki xizmatdan foydalanmasdan, noldan quramiz. Maqsad — autentifikatsiya ichida nimalar bo‘layotganini tushunish. Keyinchalik tayyor yechim ishlatsangiz ham, bu bilim uni to‘g‘ri sozlash va xatolarni topishga yordam beradi.
Nimani quramiz?
Bo‘lim oxirida API quyidagi imkoniyatlarga ega bo‘ladi:
| Endpoint | Vazifasi | Kim uchun |
|---|---|---|
POST /auth/signup |
Ro‘yxatdan o‘tish | Hamma |
POST /auth/login |
Tizimga kirish, token olish | Hamma |
GET /me |
Joriy foydalanuvchi ma’lumoti | Faqat tizimga kirganlar |
POST /books |
Kitob qo‘shish | Faqat tizimga kirganlar |
Umumiy sxema
1. Ro‘yxatdan o‘tish
Klient ── POST /auth/signup {email, password} ──→ Server
│ parolni bcrypt bilan xeshlaydi
│ bazaga yozadi
Klient ←────────── 201 Created ─────────────────── ┘
2. Tizimga kirish
Klient ── POST /auth/login {email, password} ───→ Server
│ xeshni tekshiradi
│ JWT token yaratadi
Klient ←────────── 200 {"access_token": "eyJ..."} ┘
3. Himoyalangan so‘rov
Klient ── GET /me ───────────────────────────────→ Auth middleware
Authorization: Bearer eyJ... │ tokenni tekshiradi
│ foydalanuvchini contextga joylaydi
↓
Handler
Klient ←────────── 200 {"id": 1, "email": ...} ── ┘
Bo‘lim rejasi
| Dars | Mavzu |
|---|---|
| Authentication nima? | Asosiy tushunchalar: identifikatsiya, autentifikatsiya, avtorizatsiya |
| Session va Token-based auth farqi | Ikki yondashuv, ularning afzalliklari va kamchiliklari |
| Login / Signup endpointlari | Ro‘yxatdan o‘tish va tizimga kirishni yozish |
| JWT yaratish va tekshirish | JWT tuzilishi, golang-jwt kutubxonasi |
| Auth middleware yozish | Himoyalangan endpointlar va foydalanuvchini contextga joylash |
Oldindan kerakli bilimlar
Bo‘lim quyidagi darslarga tayanadi:
- Middleware va logging asoslari — auth tekshiruvi middleware ko‘rinishida yoziladi;
- Validation — email va parolni tekshirish uchun;
- Parollarni xeshlash (bcrypt) — parollarni saqlash uchun;
- Config va .env — JWT maxfiy kalitini saqlash uchun.
Xavfsizlik haqida bir eslatma
Autentifikatsiya — ilovaning eng nozik qismi. Unda yo‘l qo‘yilgan kichik xato butun tizimni ochib qo‘yishi mumkin. Shuning uchun bo‘lim davomida har bir qarorning nima uchun aynan shunday qabul qilinganini tushuntiramiz.
Bu bo‘limdagi kod o‘rganish uchun mo‘ljallangan va asosiy qoidalarga amal qiladi. Katta foydalanuvchilar bazasiga ega production tizimi uchun esa ikki bosqichli autentifikatsiya, parolni tiklash, emailni tasdiqlash va kirishga urinishlarni cheklash kabi qo‘shimcha imkoniyatlar ham kerak bo‘ladi. Oxirgisi Brute-force himoya darsida ko‘riladi.
Birinchi darsda autentifikatsiya aslida nima ekanini aniqlab olamiz.