Перейти к основному содержимому
Версия: 7.0

Токены сессий

Пассворк использует модель аутентификации на основе токенов с парой Access Token / Refresh Token.

Обзор системы токенов

ТокенНазначениеВремя жизни
Access TokenАутентификация API-запросов~2.8 часа
Refresh TokenОбновление Access Token36 часов

Почему не JWT?

Токены Пассворка — это случайные строки, а не JWT. Для менеджера паролей такой подход обеспечивает более высокий уровень безопасности:

ХарактеристикаТокены ПассворкаJWT
ФорматСлучайная Base64 строкаJSON с подписью
Информация в токенеНетPayload с данными
ВалидацияПоиск в базе данныхПроверка подписи
Отзыв токенаМгновенный (удаление из БД)Требует blacklist

Преимущества для безопасности:

  • Мгновенный отзыв сессии. При подозрении на компрометацию администратор или пользователь может немедленно завершить любую сессию — токен удаляется из базы и сразу становится недействительным. JWT продолжает работать до истечения срока действия.

  • Полный контроль над сессиями. Все активные сессии хранятся на сервере, что позволяет отслеживать устройства, IP-адреса и время последней активности. Администратор видит полную картину и может управлять доступом.

  • Отсутствие чувствительных данных в токене. JWT содержит payload с информацией о пользователе, которая может быть прочитана (Base64 — это не шифрование). Токены Пассворка — просто случайные идентификаторы без какой-либо информации.

  • Устойчивость к компрометации ключа. При утечке секретного ключа JWT злоумышленник может создавать валидные токены для любого пользователя. В случае с сессионными токенами такой вектор атаки отсутствует.

  • Отсутствие секретного ключа подписи. JWT требует хранения приватного ключа на сервере для подписи токенов — это дополнительный секрет, который нужно защищать, ротировать и контролировать. Сессионные токены Пассворка — просто случайные строки, для их генерации не требуется никаких секретных ключей.


Access Token

Характеристики

ПараметрЗначение
Длина256 бит
ФорматBase64
Длина строки~44 символа
Энтропия256 бит
Время жизни по умолчанию10 000 секунд (~2.8 часа)

Генерация

Access Token генерируется криптографически стойким генератором случайных чисел:

token = base64(random_bytes(32))

Валидация

При каждом запросе сервер:

  1. Извлекает токен (из cookie или заголовка, в зависимости от режима)
  2. Ищет токен в базе данных
  3. Проверяет время жизни
  4. Связывает запрос с пользователем

Режимы передачи токена

Пассворк использует два режима передачи Access Token в зависимости от типа клиента:

Browser Mode (веб-приложение)

Для веб-приложения Access Token передаётся через HttpOnly Cookie:

ПараметрЗначение
HttpOnlyДа — недоступен для JavaScript (защита от XSS)
SecureДа — только по HTTPS
SameSiteStrict — защита от CSRF

В этом режиме браузер автоматически прикрепляет cookie к каждому запросу. Access Token не возвращается в теле ответа при аутентификации — только в Set-Cookie заголовке.

API Mode (desktop, extension, mobile)

Для API-клиентов Access Token передаётся в заголовке Authorization:

Authorization: Bearer {access_token}

В этом режиме Access Token возвращается в теле ответа при аутентификации, и клиент самостоятельно управляет его хранением.

Сравнение режимов

ПараметрBrowser ModeAPI Mode
КлиентыВеб-приложениеDesktop, Extension, Mobile
Передача токенаHttpOnly CookieAuthorization header
Защита от XSS✓ (HttpOnly)Зависит от клиента
Управление токеномБраузер (автоматически)Клиент (вручную)

Refresh Token

Характеристики

ПараметрЗначение
Длина256 бит
ФорматBase64
Длина строки~44 символа
Энтропия256 бит
Время жизни по умолчанию129 600 секунд (36 часов)

Назначение

Refresh Token используется для получения нового Access Token без повторной аутентификации. Подробнее о процессе обновления — в разделе Ротация токенов.


Настройка времени жизни

По ролям пользователей

Время жизни токенов настраивается на уровне роли пользователя:

НастройкаЗначение по умолчанию
Время жизни Access Token10 000 сек (~2.8 часа)
Время жизни Refresh Token129 600 сек (36 часов)

Примеры конфигураций

СценарийAccess TTLRefresh TTL
Стандартный пользователь10 000 сек129 600 сек
Высокая безопасность1 800 сек (30 мин)14 400 сек (4 часа)
Удобство28 800 сек (8 часов)604 800 сек (7 дней)

Жизненный цикл сессии

Полный жизненный цикл

T=0: Аутентификация. Пользователь вводит учётные данные. Сервер создаёт Access Token (TTL: 2.8 часа) и Refresh Token (TTL: 36 часов).

T=2.8h: Access Token истёк. Клиент отправляет Refresh Token. Сервер выдаёт новые токены. Старый Refresh Token инвалидируется.

T=36h: Refresh Token истёк. Требуется повторная аутентификация. Пользователь вводит учётные данные заново.

Альтернативный сценарий — Выход. Пользователь нажимает «Выйти». Оба токена инвалидируются. Сессия завершена.

Инвалидация токенов

Все токены сессии инвалидируются при:

  • Выходе пользователя из системы
  • Смене мастер-пароля
  • Сбросе мастер-пароля администратором

Ротация токенов

Стандартный режим (приложения)

Для веб-приложения, браузерного расширения, мобильного и desktop приложений действует строгая политика ротации токенов.

При обновлении сессии клиент отправляет Access Token и Refresh Token одновременно, и в ответ получает новую пару токенов. Таким образом происходит постоянная ротация обоих токенов, что предотвращает повторное использование украденного токена.

Режим для автоматизации (API)

Для DevOps-задач и автоматизации строгая ротация часто неудобна. Поэтому для сессий, созданных через генерацию API-токенов, предусмотрен альтернативный режим:

  • Обновление только Access Token без смены Refresh Token
  • Отдельное обновление Refresh Token при необходимости

Это позволяет использовать долгоживущие Refresh Token в скриптах и CI/CD пайплайнах.


Безопасность токенов

Защита от перехвата

УгрозаЗащита
Перехват в сетиHTTPS/TLS обязателен
XSS-атакаHttpOnly cookies (Browser Mode)
CSRFCSRF Token + SameSite cookies

CSRF Token

Назначение

CSRF Token защищает от атак межсайтовой подделки запросов. Обязателен для всех модифицирующих операций.

Характеристики

ПараметрЗначение
Размер256 бит
ФорматHexadecimal (64 символа)
Энтропия256 бит
ГенераторКриптографически стойкий

Использование

CSRF Token передаётся в заголовке каждого запроса:

X-CSRF-Token: {csrf_token}

Требования по типам клиентов

Тип клиентаCSRF Token
Веб-приложение (Browser Mode)✓ Обязателен (генерируется и проверяется автоматически)
Браузерное расширениеОпционально (по запросу клиента)
Mobile приложениеОпционально (по запросу клиента)
API— (не используется)

Назначение

Опциональная функция дополнительной защиты для Browser Mode. Привязывает сессию к контексту клиента, защищая от кражи cookie и session hijacking.

Как работает

При включении функции сервер вычисляет подпись на основе:

  • IP-адрес клиента
  • User-Agent браузера
  • Идентификатор сессии
  • Секретный ключ (60 символов, ~357 бит энтропии)

Подпись вычисляется по формуле:

cookieSign = HMAC-SHA512(IP + UserAgent + SessionID, secret)

Подпись сохраняется в отдельном HttpOnly cookie и проверяется при каждом запросе.

Защита от атак

АтакаЗащита
Session HijackingУкраденная cookie не работает с другого IP
Cookie TheftCookie бесполезна без совпадения IP + User-Agent

Ограничения

  • Смена IP (VPN, мобильная сеть) требует повторной аутентификации
  • Обновление браузера может изменить User-Agent

Включение

Функция включается администратором в настройках системы. По умолчанию отключена для совместимости с пользователями с динамическим IP.


Типы клиентов

Пассворк различает четыре типа клиентов с разными механизмами безопасности:

ФункцияWebBrowser ExtensionMobileAPI
Режим передачи токенаBrowser ModeAPI ModeAPI ModeAPI Mode
Access TokenCookieHeaderHeaderHeader
CSRF Token✓ ОбязателенОпциональноОпционально
Cookie SignОпционально
PIN-код✓ Поддерживается

Browser Extension — единственный тип клиента с поддержкой серверного PIN-кода. PIN-код проверяется на сервере, который открывает временное окно для использования API. По истечении времени сессия блокируется до повторного ввода PIN-кода. При нескольких неверных попытках ввода сервер немедленно разрывает сессию. Это защищает от кражи токенов — даже при компрометации токена злоумышленник не сможет использовать API без знания PIN-кода.


HTTP-заголовки

Заголовки аутентификации

ЗаголовокОписаниеРежим
AuthorizationAccess Token (Bearer {token})API Mode
CookieAccess Token (автоматически)Browser Mode
X-CSRF-TokenCSRF защитаВсе режимы
X-Master-Key-HashХеш мастер-ключаПри необходимости

Хранение токенов на клиенте

Каждый тип клиента реализует безопасное хранение токенов в соответствии с возможностями платформы:

  • Веб-приложение — Access Token хранится в HttpOnly Cookie, недоступной для JavaScript (защита от XSS)
  • Desktop и Mobile приложения — токены хранятся в защищённых хранилищах операционной системы с ограниченным доступом
  • Браузерное расширение — используется изолированное хранилище браузера, недоступное для веб-страниц

Множественные сессии

Параллельные сессии

Пассворк поддерживает множественные одновременные сессии:

  • Пользователь может быть авторизован на нескольких устройствах
  • Каждое устройство имеет свою пару токенов
  • Выход на одном устройстве не влияет на другие

Управление сессиями

Пользователь может:

  • Просмотреть список активных сессий
  • Завершить конкретную сессию
  • Завершить все сессии (кроме текущей)

Администратор может:

  • Принудительно завершить все сессии пользователя

Рекомендации по настройке

Высокая безопасность

ПараметрЗначение
Access Token30 минут
Refresh Token4 часа
  • Частая ре-аутентификация
  • Короткое окно для атаки
  • Подходит для критичных систем

Баланс безопасности и удобства (по умолчанию)

ПараметрЗначение
Access Token~2.8 часа
Refresh Token36 часов
  • Рабочий день без повторной аутентификации
  • Refresh Token на ~1.5 рабочих дня
  • Подходит для большинства организаций

Максимальное удобство

ПараметрЗначение
Access Token8 часов
Refresh Token7 дней
  • Аутентификация раз в неделю
  • Подходит для низкорисковых сценариев
  • Не рекомендуется для критичных данных