Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: authentication, authorization, JWT, access token, API security, bearer token

Как организовать взаимодействие фронтенда с backend API с использованием токенов?

Этот вопрос проверяет понимание механизмов аутентификации и авторизации в веб-приложениях, а именно использование токенов для безопасного взаимодействия клиентской части с серверным API.

Короткий ответ

Взаимодействие организуется через отправку токена доступа (обычно JWT) в заголовке HTTP-запроса. Пользователь сначала логинится, получая токен от сервера. Этот токен затем сохраняется на клиенте (например, в localStorage или HttpOnly cookie) и автоматически добавляется к каждому последующему запросу к защищённым эндпоинтам API. Сервер проверяет валидность токена перед выполнением запроса, что обеспечивает безопасный доступ к данным.

Длинный ответ

Организация взаимодействия фронтенда с backend API с использованием токенов — это стандартный подход для управления сессиями пользователя в современных stateless-приложениях. Вместо хранения состояния сессии на сервере, клиент получает подписанный токен после успешной аутентификации (например, через логин и пароль) и использует его для доступа к защищённым ресурсам.

Основной поток работы

Типичный процесс включает несколько шагов:

  • Аутентификация: Клиент отправляет учётные данные (например, логин/пароль) на специальный эндпоинт API (например, /api/auth/login).
  • Получение токена: Сервер проверяет данные, и если они верны, генерирует токен (чаще всего JWT — JSON Web Token) и отправляет его в ответе.
  • Хранение токена на клиенте: Фронтенд сохраняет полученный токен. Распространённые варианты: localStorage, sessionStorage или HttpOnly cookie (последний более безопасен против XSS-атак).
  • Использование токена: При каждом последующем запросе к защищённому API фронтенд добавляет токен в заголовок HTTP-запроса, обычно в формате Authorization: Bearer <ваш_токен>.
  • Верификация на сервере: Backend проверяет подпись токена, его срок действия и другие claims перед тем, как выполнить запрос и вернуть данные.

Практический пример кода

Ниже приведён упрощённый пример на JavaScript с использованием Fetch API.

// 1. Функция для выполнения входа и получения токена
async function login(username, password) {
    const response = await fetch('/api/auth/login', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ username, password })
    });
    const data = await response.json();
    if (response.ok) {
        // Сохраняем токен в localStorage
        localStorage.setItem('accessToken', data.accessToken);
        console.log('Вход выполнен');
    } else {
        throw new Error(data.message);
    }
}

// 2. Функция для выполнения авторизованного запроса к API
async function fetchProtectedData() {
    const token = localStorage.getItem('accessToken');
    if (!token) {
        throw new Error('Токен не найден');
    }
    const response = await fetch('/api/protected/data', {
        headers: {
            'Authorization': `Bearer ${token}`
        }
    });
    if (response.status === 401) {
        // Токен истёк или недействителен
        // Можно попробовать обновить токен с помощью refresh token
        console.log('Требуется повторная аутентификация');
        localStorage.removeItem('accessToken');
        // Перенаправить на страницу входа
    }
    return await response.json();
}

// Пример использования
// login('user', 'pass').then(() => fetchProtectedData());

Безопасность и лучшие практики

При использовании токенов важно учитывать риски безопасности. Хранение в localStorage уязвимо для XSS-атак. Более безопасный подход — использование HttpOnly cookies (токен автоматически отправляется с каждым запросом) или комбинации Access Token (короткоживущий) и Refresh Token (долгоживущий, хранится в secure cookie). Также необходимо использовать HTTPS для шифрования трафика.

Вывод: Использование токенов — это эффективный и масштабируемый способ организации stateless-аутентификации между фронтендом и API. Этот подход стоит применять в SPA (Single Page Applications), мобильных приложениях и микросервисных архитектурах, где важно избегать хранения состояния сессии на сервере.

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • JavaScript

    JavaScript

  • Node.js

    Node.js

Ключевые слова

#authentication

#authorization

#JWT

#access token

#API security

#bearer token

Подпишись на React Developer в телеграм