TTL (time-to-live) в контексте библиотеки @hapi/iron определяет время жизни
«запечатанных» (sealed) данных. После истечения заданного интервала
такие данные становятся недействительными и не могут быть успешно
расшифрованы через unseal. Это ключевой механизм контроля
актуальности токенов, сессий и временных объектов.
В Iron TTL задаётся через опции при вызове Iron.seal.
Значение указывается в миллисекундах и определяет максимальное время, в
течение которого зашифрованные данные считаются валидными.
Основная форма использования:
import Iron from '@hapi/iron';
const password = 'very-secure-password';
const sealed = await Iron.seal(
{ userId: 42 },
password,
{
ttl: 60 * 1000 // 1 минута
}
);
После истечения 60 секунд попытка расшифровать строку приведёт к ошибке истечения срока действия.
При вызове Iron.unseal библиотека проверяет временные
ограничения, заложенные в sealed-структуру. Если TTL истёк, операция
завершится исключением.
const unsealed = await Iron.unseal(
sealed,
password,
Iron.defaults
);
Если время жизни истекло, будет выброшена ошибка вида
Expired seal.
В Iron используются два близких по смыслу параметра:
В большинстве сценариев они используются вместе, но имеют различную семантику.
Пример комбинированной конфигурации:
{
ttl: 5 * 60 * 1000, // 5 минут общего срока жизни
maxAge: 2 * 60 * 1000 // не старше 2 минут при проверке
}
В такой конфигурации данные могут быть отклонены даже до истечения
ttl, если превышен maxAge.
При вызове seal библиотека добавляет служебные
метаданные:
TTL не хранится как фиксированное поле, а вычисляется на основе времени создания и переданных опций. Это важно для понимания того, что изменение системного времени может повлиять на проверку.
Чаще всего TTL применяется для:
Пример:
const sessionToken = await Iron.seal(
{ sessionId: 'abc123' },
password,
{
ttl: 15 * 60 * 1000 // 15 минут
}
);
После истечения времени:
Это обеспечивает криптографическую защиту от повторного использования устаревших данных.
Долгоживущие sealed-объекты увеличивают риск использования устаревших данных, особенно в системах с авторизацией.
Короткое время жизни может приводить к:
Использование только одного параметра без понимания их взаимодействия может приводить к неожиданному поведению при валидации.
TTL подбирается исходя из характера данных:
При проектировании систем с Iron важно учитывать, что TTL является не просто таймером, а частью модели безопасности, влияющей на валидность данных на криптографическом уровне.