javascript42
Главная
Все учебники
Блог
Учебник Iron
Введение в Iron
Что такое Iron и зачем он нужен
Место Iron в экосистеме Node.js
Философия промежуточного слоя
Установка и первый запуск
Сравнение с Express, Koa и Hapi
Архитектура и основные концепции
Модель запрос-ответ в Iron
Цепочка обработчиков
Жизненный цикл запроса
Понятие плагина и расширяемость
Внутренняя структура объекта запроса
Внутренняя структура объекта ответа
Токены и сессии: ядро Iron
Принцип работы Iron-токенов
Структура sealed-токена
Алгоритм шифрования: AES-256-CBC
Алгоритм подписи: HMAC-SHA256
Генерация и управление ключами
Срок жизни токена и его обновление
Разница между подписью и шифрованием в контексте Iron
Password rotation и множественные ключи
Работа с паролями и ключами
Форматы передачи пароля
Одиночный пароль
Массив паролей для ротации
Именованные пароли
Хранение ключей: переменные окружения и секретные хранилища
Автоматическая ротация без инвалидации старых токенов
Seal и Unseal
Метод seal: параметры и возвращаемые значения
Метод unseal: параметры и возвращаемые значения
Обработка истёкших токенов
Обработка повреждённых токенов
Асинхронная природа seal и unseal
Типичные ошибки и их расшифровка
Настройка параметров шифрования
Объект options и его поля
Настройка алгоритма шифрования
Настройка алгоритма подписи
Установка ttl
Поле timestampSkew и защита от рассинхронизации часов
Поле localtimeOffsetMsec
Переопределение параметров для конкретного вызова
Интеграция с HTTP-сервером
Использование Iron без фреймворка на чистом http
Передача токена через заголовок Authorization
Передача токена через Cookie
Передача токена через тело запроса
Установка и чтение Cookie вручную
Флаги Cookie: HttpOnly, Secure, SameSite
Срок жизни Cookie и синхронизация с ttl токена
Интеграция с Express
Подключение Iron как middleware
Создание обёртки для проверки токена
Защита маршрутов с помощью middleware
Обновление токена после успешной проверки
Передача данных из токена в req.user
Обработка ошибок аутентификации
Структура проекта с Iron и Express
Интеграция с Fastify
Регистрация плагина аутентификации
Декораторы запроса и ответа
Хуки onRequest и preHandler
Управление сессией через Fastify-cookie
Схемы валидации и Iron
Интеграция с Hapi
Жизненный цикл запроса в Hapi
Схема аутентификации на основе Iron
Регистрация схемы через server.auth.scheme
Использование request.auth.credentials
Защита маршрутов через опции route.auth
Интеграция с Next.js
Edge Runtime и ограничения
Iron-session: обёртка над Iron для Next.js
API Routes и проверка сессии
App Router и серверные компоненты
Серверные экшены и Iron
Клиент-серверная граница и передача данных сессии
Управление сессией
Сессия без сервера: stateless-подход
Что хранить в токене, а что — в базе данных
Инвалидация токенов без чёрного списка
Чёрный список токенов: реализация через Redis
Скользящие сессии и обновление ttl
Мультиустройственные сессии
Ограничение числа активных сессий
Безопасность
Атака повторного воспроизведения (replay attack)
Защита от подделки запроса (CSRF)
Утечка токена: сценарии и защита
Токен в URL: почему это опасно
Безопасная передача через HTTPS
Хранение секретов на сервере
Логирование и токены: что нельзя писать в лог
Аудит зависимостей и обновление Iron
Производительность
Стоимость операций seal и unseal
Кэширование результатов unseal
Размер токена и влияние на трафик
Сравнение с JWT по скорости и размеру
Нагрузочное тестирование middleware
Профилирование узких мест
Тестирование
Юнит-тесты для seal и unseal
Мокирование токенов в тестах
Интеграционные тесты защищённых маршрутов
Тестирование истечения срока токена
Тестирование ротации ключей
Тестирование невалидных и повреждённых токенов
Инструменты: Jest, Vitest, Supertest
Отладка и диагностика
Распространённые ошибки и их причины
Отладка несовпадения ключей
Отладка проблем с временными метками
Инспекция содержимого токена
Логирование без утечки секретов
Трассировка жизненного цикла токена
Расширенные паттерны
Многоуровневые токены
Токен внутри токена
Делегирование доступа через вложенные данные
Iron в микросервисной архитектуре
Общие ключи между сервисами
Токены с ограниченными правами (scoped tokens)
Временные одноразовые токены
Передача контекста между сервисами без базы данных
Миграция и совместимость
Переход с JWT на Iron
Переход с cookie-session на Iron
Параллельная работа двух схем во время миграции
Версионирование схемы токена
Обратная совместимость при смене алгоритма
Справочник API
iron.seal
iron.unseal
iron.defaults
iron.algorithms
Константы и типы ошибок
TypeScript-типы и декларации