Tarkibga o'tish

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:

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.