Internet asosan HTTP(S) protokolida muloqot qiladi. Ammo bu protokol stateless (ya'ni state - xolatlarni saqlab bormaydi degani). Endi tasavvur qiling, agar internet stateless bo'lsa unda u bizni authentication qilgan xolatdamizmi yo'qmi qanday biladi?
Tizimlar foydalanuvchilarni ikki xil ko'radi, authenticated user va unauthenticated user. Authenticated userlar tizimga login/sing in qilib kirgani uchun va tizimda bu foydalanuvchi haqida ba'zi ma'lumotlar borligi uchun uni taniydi.
Unauthenticated userlar esa tizimga login/sign in qilmasdan kirgan foydalanuvchilar bo'lib tizimda bu foydalanuvchi haqida hech qanday ma'lumot yo'q va unga ba'zi ishlarni qilishni cheklashi ham mumkin (chunki u be-ga-na, ha beganada hay).
Ammo yuqorida aytilgan gapga qarasak, HTTP(S) protokoli stateless bo'lsa, tizim foydalanuvchini login/sign in qilgan yoki qilmaganini qanday biladi?
Session Authentication
Foydalanuvchi tizimga username/phone va passwordini yozib kirganida tizim ushbu foydalanuvchi uchun maxsus va noyob session ID yaratadi. Uni ham server databaseda, ham foydalanuvchi browserida saqlaydi. Shunda foydalanuvchi har safar serverga so'rov (request) yuborganida ~~shaxsini tasdiqlovchi xujjatini~~ session IDsini jo'natadi. Agar server foydalanuvchini session IDsini tanisa demak foydalanuvchini o'zini ham taniydi. Agar tizimda bunday session ID mavjud bo'lmasa, tizim uni avtomatik logout qilib yuboradi. Agar foydalanuvchini o'zi tizimdan logout qilsa, server o'zida saqlab turgan o'sha foydalanuvchiga tegishli sessionIDni o'zidan o'chirib yuboradi (tamom hay).
Minus tomonlari:
- Resource consuption - agar bir vaqtda turli qurilmalar bilan login qilsangiz barchasi uchun alohida session ID yaratadi. Endi 1 milliard foydalanuvchi 3ta qurilmasi bilan tizimga kirishini tasavvur qiling.
- Temporary - sessionID lar vaqtinchalik bo'ladi. Qanchadur muddat foydalanuvchi tizimga kirmagan bo'lsa tizim uni o'chirib tashlaydi va foydalanuvchi qaytganida u tizimdan logout qilganini ko'radi va qayta kirishi kerak bo'ladi.
- va boshqa sabablarini o'rganib chiqishingiz mumkin...
Cookie Authentication
Foydalanuvchi tizimga kirganida server unga maxsus cookie beradi (bu siz o'ylagan pecheniya emas). Cookie kichik hajmli (eng ko'pi bilan 4 kb bo'ladi) fayl bo'ladi va u browseringizda saqlanadi.
- Har bir HTTP request cookie bilan yuboriladi, shuning xisobiga traffic xajmi kattaradi.
- Xavsiz emas, unchalik ham xavfsiz emas CSRF xujumga uchrash ehtimoli bor.
- Cookie xajmi 4KB gacha ma'lumot ushlay oladi, agar sizga kattaroq xajm kerak bo'lsa aniq bu sizga to'g'ri kelmaydi.
Ushbu postni ikkinchi qismida Token, JWT va Passwordless authentication haqida yozaman, kanalimni kuzatib boring!