Junior
Тастыктоо процеси кандай өтөт?
sobes.tech AI
AIден жооп
Пайдаланушыны аутентификациялау процесі фронтенд-қосымшасында жалпы түрде келесі қадамдардан тұрады:
- Деректерді сұрау: Пайдаланушы сайт немесе қосымшадағы формаға логин мен пароль енгізеді.
- Деректерді серверге жіберу: Фронтенд бұл деректерді HTTP сұрауы арқылы (әдетте
POST) аутентификацияның арнайы соңғы нүктесіне жібереді. Деректер JSON немесе FormData форматында болуы мүмкін. - Деректерді серверде тексеру: Бэкенд деректерді алады, олардың бар-жоғын өзінің дерекқорында тексереді (мысалы, логин бар ма және енгізілген парольдің хэші дерекқордағы хэшке сәйкес келе ме).
- Токен/сессияны құру: Егер деректер дұрыс болса, сервер бірегей аутентификация маркерін құрады. Бұл болуы мүмкін:
- Сессия ID: Сервер сессия құрып, оны пайдаланушымен байланыстырады, клиентке сессия идентификаторын жібереді (мысалы,
HttpOnlyбелгісі бар кук арқылы). - Токен (мысалы, JWT): Сервер пайдаланушы туралы ақпарат пен оның құқықтарын қамтитын токенді құрады, оны өзінің құпия кілтімен қол қояды. Бұл токен клиентке жіберіледі.
- Сессия ID: Сервер сессия құрып, оны пайдаланушымен байланыстырады, клиентке сессия идентификаторын жібереді (мысалы,
- Токен/сессияны клиентке жіберу: Сервер фронтендке аутентификация маркерін жібереді:
- Егер сессия ID қолданылса, ол әдетте
Set-Cookieарқылы беріледі. - Егер токен қолданылса, ол жауаптың денесінде (JSON) немесе
Authorizationтақырыбында (Bearer <токен>) берілуі мүмкін.
- Егер сессия ID қолданылса, ол әдетте
- Маркерді сақтау: Фронтенд маркерді алады және келесі сұраулар үшін сақтайды:
- Сессия ID браузердегі кукта сақталады (автоматты түрде)
- Токен localStorage, sessionStorage немесе кукта сақталуы мүмкін (
HttpOnlyбелгісімен — XSS-тан қорғау үшін). Қауіпсіздік үшінHttpOnlyкукта сақтау ұсынылады.
- Қауіпсіз сұрауларда маркерді пайдалану: Қалған сұрауларда фронтенд сақталған маркерді жібереді:
- Браузер автоматты түрде сессия кукін жібереді.
- Токен үшін фронтенд оны
Authorizationтақырыбына қосуы керек.
- Маркерыді серверде тексеру: Әр сұрауда сервер маркерді алады және оның заңдылығын тексереді (мысалы, мерзімі, қолтаңбасы, сессияның бар-жоғын).
- Рұқсат беру: Егер маркер жарамды болса, сервер оны байланысты пайдаланушыны анықтайды және оның ресурстарға қол жеткізу құқықтарын тексереді.
- Сұрауды орындау: Егер пайдаланушы аутентификацияланған және рұқсат етілген болса, сервер сұрауды орындайды және жауап береді. Әйтпесе, қате хабарын жібереді (
401 Unauthorizedнемесе403 Forbidden).
Аутентификация схемалары әртүрлі болуы мүмкін (сессиялар, JWT, OAuth2, OpenID Connect және т.б.), бірақ негізгі қадамдар ұқсас.
Мысал — fetch API және токен қолдану арқылы деректерді серверге жіберу:
// Пайдаланушы деректері
const userData = {
username: 'user123',
password: 'securepassword'
};
// Деректерді серверге жіберу
fetch('/api/login', { // аутентификация соңғы нүктесі
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(userData)
})
.then(response => {
if (!response.ok) {
throw new Error('Login failed');
}
return response.json(); // сервер токенмен қайтаруы күтілуде
})
.then(data => {
const authToken = data.token; // жауаптан токенді алу
localStorage.setItem('authToken', authToken); // токенді сақтау
console.log('Login successful, token saved.');
// Қолданушыны қорғаулы бетке бағыттау
})
.catch(error => {
console.error('Authentication error:', error);
// Қате туралы хабар көрсету
});
// Қорғалған сұрау токенмен
const token = localStorage.getItem('authToken');
if (token) {
fetch('/api/protected-resource', {
method: 'GET',
headers: {
'Authorization': `Bearer ${token}` // токенді Authorization тақырыбына қосу
}
})
.then(response => {
if (!response.ok) {
if (response.status === 401) {
console.log('Token expired or invalid. Redirecting to login.');
localStorage.removeItem('authToken');
// window.location.href = '/login';
}
throw new Error('Failed to fetch protected resource');
}
return response.json();
})
.then(data => {
console.log('Protected data:', data);
})
.catch(error => {
console.error('Error fetching protected resource:', error);
});
} else {
console.log('No auth token found. Redirecting to login.');
// window.location.href = '/login';
}
Қауіпсіздікке қатысты маңызды аспектілер:
- Барлық деректерді HTTPS арқылы жіберу
- Маркерлерді қауіпсіз сақтау
- Қысқа мерзімді токендерді пайдалану
- Серверде деректерді тексеру