Проверяет понимание механизма обновления access token через refresh token и того, как клиент инициирует обновление, когда refresh token не передаётся в каждом запросе.
Access token — это короткоживущий токен, который клиент прикладывает к каждому обычному запросу, обычно в заголовке Authorization: Bearer <token>. Refresh token живёт дольше и хранится отдельно, чаще всего в защищённом хранилище (httpOnly cookie или secure storage). Он не отправляется с каждым запросом, потому что это увеличило бы риск его утечки и нагрузку на сервер.
Когда access token истекает, сервер возвращает 401 Unauthorized. Клиент перехватывает этот ответ и вместо повторной авторизации пользователя вызывает отдельный эндпоинт, например POST /auth/refresh, передавая туда refresh token. Сервер валидирует refresh token, проверяет его срок жизни и статус (не отозван ли он), после чего выдаёт новый access token и, при необходимости, новый refresh token.
async function request(url, options = {}) {
let response = await fetch(url, {
...options,
headers: { ...options.headers, Authorization: `Bearer ${accessToken}` }
});
if (response.status === 401) {
const refreshed = await fetch('/auth/refresh', {
method: 'POST',
credentials: 'include' // refresh token в httpOnly cookie
});
if (!refreshed.ok) throw new Error('Session expired');
const data = await refreshed.json();
accessToken = data.accessToken;
response = await fetch(url, {
...options,
headers: { ...options.headers, Authorization: `Bearer ${accessToken}` }
});
}
return response;
}Такой подход применяется в SPA, мобильных приложениях и микросервисах, где важно поддерживать сессию без повторного ввода пароля. Итог: access token обновляется по требованию через отдельный эндпоинт, а refresh token остаётся в защищённом хранилище и используется только для этой операции.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию