Sobes.tech
Junior

Раванди тасдиқ чӣ гуна аст?

sobes.tech AI

Ҷавоб аз AI

Процеси authentication-и корбар дар барномаи пешиҷоъӣ одатан аз қадамҳои зерин иборат аст:

  1. Дархости маълумоти корбарӣ: Корбар логин ва паролро дар шакли сайт ё барнома ворид мекунад.
  2. Ирсол кардани маълумот ба сервер: Фронтенд ин маълумотҳоро бо истифода аз HTTP-захира (одатан POST) ба нуқтаи махсуси authentication мефиристад. Маълумот метавонад дар бадани дархост дар формати JSON ё FormData фиристода шавад.
  3. Таҳқиқи маълумот дар сервер: Бекенд маълумотҳоро мегирад, онҳоро дар пойгоҳи додаҳояш санҷида мебинад (масалан, оё логин вуҷуд дорад ва оё хеши парол воридшуда бо хеши дар пойгоҳ мувофиқат мекунад).
  4. Таҳия кардани токен/сессия: Агар маълумот дуруст бошанд, сервер як маркер ёдгории authentication-ро таҳия мекунад. Ин метавонад:
    • ID-и сессия: Сервер сессияро месозад ва онро бо корбар пайванд мекунад, ба клиент идентификатори сессия мефиристад (масалан, дар cookie бо флаг HttpOnly).
    • Токен (масалан JWT): Сервер токенро таҳия мекунад, ки маълумоти корбар ва ҳуқуқҳояшро дар бар мегирад, бо калиди сирфашон имзо мекунад. Ин токен ба клиент мефиристад.
  5. Ирсол кардани токен/сессия ба клиент: Сервер ба пешиҷоъӣ ҷавоб медиҳад, ки токен ёдгории authentication-ро мефиристад.
    • Агар ID-и сессия истифода шавад, одатан дар Set-Cookie HTTP-ҳаволак дода мешавад.
    • Агар токен истифода шавад, он метавонад дар бадани ҷавоб (JSON) ё дар Authorization-и header (Bearer <токен>) фиристода шавад.
  6. Захира кардани маркер дар клиент: Фронтенд маркерро мегирад ва барои дархостҳои оянда нигоҳ медорад.
    • ID-и сессия одатан дар cookies браузерӣ ба таври автоматӣ нигоҳ дошта мешавад.
    • Токен метавонад дар localStorage, sessionStorage ё cookies (бо флаг HttpOnly) нигоҳ дошта шавад. Пешниҳоди беҳтарин истифодаи cookies бо HttpOnly барои дастрасии токенҳо мебошад, зеро ин хавфро аз дуздии токен тавассути XSS кам мекунад.
  7. Истифодаи маркер барои дархостҳои муҳофизатшуда: Дар вақти иҷрои дархостҳои оянда ба захираҳои муҳофизатшуда (ки талаб мекунанд authentication), пешиҷоъӣ маркерро дар ҳар дархост мефиристад.
    • Барои сессияҳо, браузер автоматӣ cookies-ро бо ID-и сессия мефиристад.
    • Барои токенҳо, фронтенд бояд explicitly токенро ба Authorization header илова кунад (Authorization: Bearer <токен>).
  8. Таҳқиқи маркер дар сервер: Ҳар вақте ки дархости нав ба захираи муҳофизатшуда мерасад, сервер маркерро аз дархост мебардорад ва дурустии он (масалан, муҳлати истифода, имзои токен, мавҷудияти сессия бо ҳамин ID) санҷида мебинад.
  9. Авторизация: Агар маркер дуруст бошад, сервер корбарро, ки бо ин маркер пайванд аст, муайян мекунад ва ҳуқуқҳояшро барои дастрасӣ ба захира санҷида мебинад (ин аллакай процеси авторизация аст, пас аз authentication).
  10. Иҷрои дархост: Агар корбар authentication ва authorization-ро гузаронад, сервер дархостро иҷро мекунад ва ҷавоб мефиристад. Дар акси ҳол, сервер хато мефиристад (масалан, 401 Unauthorized ё 403 Forbidden).

Шаблонҳои authentication гуногун метавонанд бошанд (барои мисол, асоси сессияҳо, JWT, OAuth2, OpenID Connect ва ғайра), аммо қадамҳои асосӣ барои гирифтани ва истифодаи маркер барои муайян кардани корбар монанд мемонанд.

Масалан, барои ирсол кардани маълумот ба сервер (бо истифода аз fetch API ва токен):

// Масалан маълумоти корбар
const userData = {
  username: 'user123',
  password: 'securepassword'
};

// Ирсол кардани маълумот ба сервер
fetch('/api/login', { // Нуқтаи дархости authentication дар сервер
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(userData)
})
.then(response => {
  if (!response.ok) {
    throw new Error('Намудани вуруд');
  }
  return response.json(); // Мегузарем, ки сервер JSON бо токенро баргардонад
})
.then(data => {
  const authToken = data.token; // Гирифтани токен аз ҷавоб
  localStorage.setItem('authToken', authToken); // Зохиронии токен (масалан, дар localStorage)
  console.log('Вуруд муваффақ, токен захира шуд.');
  // Иҷрои равон кардани корбар ба саҳифаи муҳофизатшуда
})
.catch(error => {
  console.error('Хатои authentication:', error);
  // Намоиши паёми хато ба корбар
});

// Масалан, дархости муҳофизатшуда бо истифода аз токен захирашуда
const token = localStorage.getItem('authToken');
if (token) {
  fetch('/api/protected-resource', {
    method: 'GET',
    headers: {
      'Authorization': `Bearer ${token}` // Илова кардани токен ба header Authorization
    }
  })
  .then(response => {
    if (!response.ok) {
      if (response.status === 401) {
        console.log('Токен тамом ё нодуруст аст. Ба логин равон мешавем.');
        // Токен нодуруст, тоза кардан ва ба логин равон шудан
        localStorage.removeItem('authToken');
        // window.location.href = '/login';
      }
      throw new Error('Намудани дастрасии муҳофизатшуда');
    }
    return response.json();
  })
  .then(data => {
    console.log('Маълумоти муҳофизатшуда:', data);
  })
  .catch(error => {
    console.error('Хатои гирифтани муҳофизатшуда:', error);
  });
} else {
  console.log('Токен барои authentication ёфта нашуд. Ба логин равон мешавем.');
  // window.location.href = '/login';
}

Масъалаҳои муҳимтарини бехатарӣ:

  • Ҳамеша HTTPS-ро истифода баред барои ирсол кардани маълумот ва токенҳо, то аз таслим шудан ба онҳо пешгирӣ кунед.
  • Токенҳоро бехатар нигоҳ доред (аз нигоҳ доштани маълумоти ҳассос, монанди паролҳо ё токенҳои дастрасӣ, дар коди кушода ё майдонҳои ошкор худдорӣ кунед).
  • Барои JWT токенҳо: истифодаи мӯҳлати кӯтоҳ барои токенҳои дастрасӣ ва навсозии онҳо бо истифода аз токенҳои навсозӣ, ки дар cookies HttpOnly нигоҳ дошта мешаванд. Токенҳои дастрасӣ метавонанд дар ёддошт ё localStorage нигоҳ дошта шаванд, аммо бояд ба хатарҳои XSS диққат дод.
  • Ҳама маълумотҳоро дар сервер тасдиқ кунед.