Sobes.tech
Junior

Autentifikatsiya jarayoni qanday amalga oshiriladi?

sobes.tech AI

AIdan javob

Foydalanuvchining autentifikatsiya jarayoni frontend ilovada quyidagicha bosqichlardan iborat:

  1. Ma'lumotlarni so'rash: Foydalanuvchi sayt yoki ilovadagi shaklga login va parolni kiritadi.
  2. Ma'lumotlarni serverga yuborish: Frontend bu ma'lumotlarni HTTP so'rovi (odatda POST) yordamida autentifikatsiya uchun maxsus endpointga yuboradi. Ma'lumotlar JSON yoki FormData formatida yuborilishi mumkin.
  3. Serverda ma'lumotlarni tekshirish: Backend ma'lumotlarni oladi, ularni ma'lumotlar bazasida tekshiradi (masalan, login mavjud foydalanuvchiga mos keladimi va kiritilgan parol hash bilan mos keladimi).
  4. Token/Session yaratish: Agar ma'lumotlar to'g'ri bo'lsa, server unikal autentifikatsiya tokenini yaratadi. Bu quyidagicha bo'lishi mumkin:
    • Session ID: Server sessiya yaratadi va uni foydalanuvchiga bog'laydi, sessiya identifikatorini (masalan, HttpOnly flag bilan cookie) yuboradi.
    • Token (masalan, JWT): Server foydalanuvchi va uning huquqlari haqida ma'lumotlarni o'z ichiga olgan tokenni yaratadi va uni imzolaydi. Bu token klientga yuboriladi.
  5. Token/sessionni klientga yuborish: Server frontendga autentifikatsiya tokenini yuboradi.
    • Agar sessiya ID ishlatilsa, u odatda Set-Cookie HTTP sarlavhasi bilan yuboriladi.
    • Agar token ishlatilsa, u javobning JSON qismida yoki Authorization sarlavhasi bilan yuborilishi mumkin (Bearer <token> formatida).
  6. Tokenni saqlash: Frontend tokenni oladi va uni keyingi so'rovlar uchun saqlaydi.
    • Sessiya ID brauzer cookiesida saqlanadi (avtomatik).
    • Token localStorage, sessionStorage yoki cookiesda saqlanishi mumkin (HttpOnly flag bilan). XSS hujumlaridan himoya uchun HttpOnly cookies tavsiya etiladi. JWT uchun yangilash tokenini ham HttpOnly cookiesda saqlash mumkin.
  7. Tokenni ishlatish: Keyingi so'rovlar uchun frontend saqlangan tokenni yuboradi.
    • Brauzer sessiya cookiesini avtomatik yuboradi.
    • Token bilan, frontend Authorization sarlavhasiga tokenni qo'shadi (Authorization: Bearer <token>).
  8. Tokenni serverda tekshirish: Har bir so'rovda server tokenni oladi va uning haqiqiyligini tekshiradi (masalan, tokenning muddati, imzosi, sessiya mavjudligi).
  9. Autentifikatsiya: Agar token haqiqiy bo'lsa, server foydalanuvchini aniqlaydi va uning huquqlarini tekshiradi.
  10. So'rovni bajarish: Agar foydalanuvchi autentifikatsiya qilingan va ruxsat etilgan bo'lsa, server so'rovni bajaradi va javob yuboradi. Aks holda, xato yuboriladi (401 Unauthorized yoki 403 Forbidden).

Ushbu jarayonlar turli usullarda bo'lishi mumkin (sesiyalar, JWT tokenlari, OAuth2, OpenID Connect va boshqalar), ammo asosiy bosqichlar o'xshash bo'lib qoladi.

Misol uchun, fetch API yordamida token bilan ma'lumot yuborish:

// Foydalanuvchi ma'lumotlari
const userData = {
  username: 'user123',
  password: 'securepassword'
};

// Ma'lumotlarni yuborish
fetch('/api/login', { // Autentifikatsiya endpointi
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(userData)
})
.then(response => {
  if (!response.ok) {
    throw new Error('Kirish muvaffaqiyatsiz');
  }
  return response.json(); // JSON formatida token kutamiz
})
.then(data => {
  const authToken = data.token; // Javobdan token olamiz
  localStorage.setItem('authToken', authToken); // Tokenni saqlaymiz
  console.log('Kirish muvaffaqiyatli, token saqlandi.');
  // Foydalanuvchini himoyalangan sahifaga yo'naltirish
})
.catch(error => {
  console.error('Autentifikatsiya xatosi:', error);
  // Xabarni foydalanuvchiga ko'rsatish
});

// Saqlangan token bilan himoyalangan so'rov
const token = localStorage.getItem('authToken');
if (token) {
  fetch('/api/protected-resource', {
    method: 'GET',
    headers: {
      'Authorization': `Bearer ${token}` // Tokenni Authorization sarlavhasiga qo'shamiz
    }
  })
  .then(response => {
    if (!response.ok) {
      if (response.status === 401) {
        console.log('Token muddati o'tgan yoki noto'g'ri. Kirish sahifasiga yo'naltirilmoqda.');
        localStorage.removeItem('authToken');
        // window.location.href = '/login';
      }
      throw new Error('Himoyalangan resursni olishda xato');
    }
    return response.json();
  })
  .then(data => {
    console.log('Himoyalangan ma'lumot:', data);
  })
  .catch(error => {
    console.error('Himoyalangan resursni olishda xato:', error);
  });
} else {
  console.log('Token topilmadi. Kirish sahifasiga yo'naltirilmoqda.');
  // window.location.href = '/login';
}

Xavfsizlik bo'yicha muhim jihatlar:

  • Har doim HTTPS dan foydalaning.
  • Tokenlarni xavfsiz saqlang.
  • JWT uchun, qisqa muddatli tokenlar va yangilash tokenlaridan foydalaning.
  • Serverda barcha ma'lumotlarni tekshiring.