Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: JWT, authentication, backend, signature, token validation

Как backend проверяет валидность JWT?

Этот вопрос проверяет понимание механизма проверки подлинности JSON Web Tokens на стороне сервера, что необходимо для обеспечения безопасности API.

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

Backend проверяет JWT, извлекая его из заголовка запроса. Затем он разделяет токен на три части: заголовок, полезную нагрузку и подпись. Ключевой шаг — верификация подписи с использованием секретного ключа (для HMAC) или публичного ключа (для RSA/ECDSA). Если подпись верна, сервер может дополнительно проверить стандартные утверждения (claims), такие как срок действия (exp) и аудитория (aud). Только после всех проверок токен считается валидным.

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

JSON Web Token (JWT) — это популярный стандарт для безопасной передачи утверждений между сторонами. После того как клиент получает токен (например, после входа в систему), он отправляет его серверу в заголовке Authorization: Bearer <token>. Задача сервера — убедиться, что этот токен подлинный, не был изменён и всё ещё действителен.

Процесс проверки

Проверка обычно состоит из следующих шагов:

  • Извлечение и парсинг: Токен извлекается из запроса и разделяется по точке на три сегмента: заголовок (header), полезная нагрузка (payload) и подпись (signature).
  • Верификация подписи: Это самый важный этап. Сервер заново вычисляет подпись, используя алгоритм, указанный в заголовке (например, HS256 или RS256), и секретный (или публичный) ключ. Если вычисленная подпись совпадает с подписью из токена, это подтверждает, что токен был выдан этим сервером (или доверенной стороной) и не был подделан.
  • Проверка утверждений (Claims): После успешной проверки подписи данные из полезной нагрузки (payload) считаются доверенными. Сервер проверяет стандартные утверждения:
    • exp (expiration time) — токен не просрочен.
    • nbf (not before) — токен уже активен.
    • iss (issuer) — издатель соответствует ожидаемому.
    • aud (audience) — токен предназначен для этого сервиса.

Пример кода на Node.js с библиотекой jsonwebtoken

const jwt = require('jsonwebtoken');
const SECRET_KEY = 'your-secret-key';

function verifyToken(req, res, next) {
    // 1. Извлечение токена из заголовка
    const authHeader = req.headers.authorization;
    if (!authHeader || !authHeader.startsWith('Bearer ')) {
        return res.status(401).json({ error: 'Token not provided' });
    }
    const token = authHeader.split(' ')[1];

    try {
        // 2. Верификация подписи и проверка claims
        const decoded = jwt.verify(token, SECRET_KEY, {
            algorithms: ['HS256'], // Явное указание алгоритма
            issuer: 'my-auth-server',
            audience: 'my-api'
        });
        // 3. Данные пользователя доступны в decoded
        req.user = decoded;
        next(); // Передаём управление следующему middleware
    } catch (error) {
        // Обработка ошибок: просрочен, неверная подпись и т.д.
        return res.status(403).json({ error: 'Invalid or expired token' });
    }
}

В этом примере метод jwt.verify() выполняет все ключевые проверки: валидность подписи, срок действия и опциональные параметры издателя и аудитории. В случае успеха возвращается расшифрованный payload, который можно использовать для идентификации пользователя.

Где применяется и важные аспекты

Этот подход применяется в микросервисных архитектурах, мобильных и одностраничных приложениях (SPA). Важно хранить секретный ключ в безопасности на сервере (например, в переменных окружения) и использовать HTTPS для передачи токена. Для отзыва токенов до истечения срока их действия требуется дополнительная инфраструктура (например, чёрный список токенов).

Вывод: Проверка JWT на бэкенде — это фундаментальный механизм для stateless-аутентификации. Её стоит применять, когда нужен масштабируемый и декомпозированный способ управления сессиями без хранения состояния на сервере.

Уровень

  • Рейтинг:

    4

  • Сложность:

    4

Навыки

  • JavaScript

    JavaScript

  • Node.js

    Node.js

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

#JWT

#authentication

#backend

#signature

#token validation

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