JWT (JSON Web Token) представляет собой компактный токен доступа, используемый для передачи утверждений между сторонами в виде JSON-объекта. Структура токена строго стандартизирована и состоит из трёх частей, разделённых точками: заголовка (header), полезной нагрузки (payload) и подписи (signature). Каждая часть кодируется в формате Base64URL, что позволяет безопасно передавать данные в URL и HTTP-заголовках.
Корректный JWT всегда имеет следующую форму:
xxxxx.yyyyy.zzzzz
где:
Каждая часть должна быть валидной строкой Base64URL. Любое отклонение от структуры делает токен недействительным ещё до проверки подписи.
В контексте прикладной разработки первичная задача заключается не в криптографической проверке, а в синтаксической и структурной валидации. Именно на этом этапе используется библиотека Validator.js.
Библиотека Validator.js предоставляет встроенную функцию
isJWT, предназначенную для проверки соответствия строки
формату JSON Web Token.
Базовая проверка выглядит следующим образом:
const validator = require('validator');
const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
const isValid = validator.isJWT(token);
Функция isJWT возвращает:
true — если строка соответствует формату JWT;false — если структура нарушена.Проверка выполняется исключительно на уровне структуры, без анализа подписи или содержимого payload.
Функция isJWT в Validator.js ориентируется на несколько
критериев:
=).Пример некорректных токенов:
invalid.token
abc.def
header.payload.signature.extra
Все эти варианты будут отклонены на этапе структурной проверки.
Хотя Validator.js скрывает внутреннюю реализацию, логика проверки может быть эквивалентна следующему регулярному выражению:
/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+$/
Данное выражение фиксирует:
Однако использование чистого регулярного выражения не гарантирует
корректность декодирования Base64URL, поэтому специализированная функция
isJWT обеспечивает более надёжную проверку.
Проверка через Validator.js не включает:
exp);scope, roles);iss) или audience
(aud).Таким образом, isJWT решает узкую задачу синтаксического
контроля, но не обеспечивает безопасность токена.
В реальных приложениях структурная валидация часто используется как предварительный фильтр перед криптографической проверкой.
Типичная последовательность выглядит следующим образом:
Пример комбинированного подхода:
const validator = require('validator');
const jwt = require('jsonwebtoken');
function validateToken(token, secret) {
if (!validator.isJWT(token)) {
return false;
}
try {
jwt.verify(token, secret);
return true;
} catch (e) {
return false;
}
}
Такой подход разделяет ответственность: Validator.js отвечает за структуру, а специализированная библиотека — за безопасность.
В реальных системах встречаются токены, которые формально похожи на JWT, но содержат ошибки:
Перед проверкой Validator.js такие токены часто проходят предварительную нормализацию:
token = token.trim().replace(/\s/g, '');
После очистки выполняется структурная проверка.
JWT использует модифицированную версию Base64:
+ заменяется на -;/ заменяется на _;= обычно удаляется.Validator.js учитывает эти особенности при проверке, что позволяет избежать ложных срабатываний при корректных токенах.
Пример корректной Base64URL строки:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
На практике ошибки чаще всего возникают не из-за структуры библиотеки, а из-за некорректной интеграции:
Bearer без
удаления.Корректная подготовка данных перед проверкой критична для стабильной
работы isJWT.
Функция isJWT имеет константную сложность O(1)
относительно длины входа, так как выполняет фиксированное количество
проверок:
Это делает её пригодной для использования в высоконагруженных системах, где JWT проверяется на каждом запросе.
В серверных приложениях структурная проверка часто интегрируется в промежуточные обработчики.
Пример логики:
function jwtMiddleware(req, res, next) {
const token = req.headers.authorization?.split(' ')[1];
if (!token || !validator.isJWT(token)) {
return res.status(401).send('Invalid token format');
}
next();
}
Такой слой отсеивает заведомо некорректные запросы до обращения к криптографической проверке.
Валидация JWT может выполняться разными способами:
Validator.js занимает промежуточное положение: он проще и быстрее полноценных JWT-библиотек, но надёжнее голых регулярных выражений за счёт учёта особенностей Base64URL.
Структурная проверка JWT выполняет роль первого фильтра безопасности:
В системах с большим количеством запросов этот этап становится критическим элементом оптимизации.