Backend Typescript 1.0.0 Help

Авторизация и Аутентификация

Зачем это нужно

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

Идентификация, аутентификация и авторизация — в чём различие

  • Идентификация — объявление своей личности: «Я — пользователь X».

  • Аутентификация — доказательство, что вы и есть X (пароль, одноразовый код, ключ и т.п.).

  • Авторизация — определение, какие действия вам разрешены (чтение, запись, администрирование и т.п.).

Факторы аутентификации

Надёжность подтверждения личности повышается комбинацией разных факторов:

  • Знание — то, что знает пользователь (пароль, PIN).

  • Обладание — то, что у пользователя есть (телефон, аппаратный токен).

  • Присущая характеристика — биометрия (отпечаток, лицо).

  • Контекст — место, время, устройство, поведенческие признаки.

Сеансы и токены доступа

После успешной аутентификации система должна «помнить» пользователя. Для этого используют сеанс (session) или токен доступа.

  • Сеансы чаще всего поддерживаются куками и хранят состояние на стороне сервера.

  • Токены обычно статeless: сервер проверяет их валидность без хранения состояния.

OAuth2: делегирование доступа

OAuth2 решает задачу безопасного делегирования доступа к ресурсам. Пользователь (Владелец ресурса) разрешает Приложению-клиенту выполнять ограничённые действия на Сервере ресурсов без передачи пароля. Разрешения выражаются через scopes (области доступа).

  • Авторизационный сервер выдаёт токены.

  • Сервер ресурсов защищает данные и проверяет токены.

  • Клиент запрашивает доступ к данным от имени пользователя.

OpenID Connect: слой идентичности поверх OAuth2

OIDC добавляет к OAuth2 идентификацию пользователя. Он вводит ID Token c набором claims (утверждений о пользователе: идентификатор, email, время выпуска и т.п.). Благодаря этому клиент может знать, кто вошёл, и привязать сеанс к конкретной личности.

JWT: формат компактных токенов

JSON Web Token — это компактный, URL-безопасный формат для переноса утверждений. Он обычно состоит из заголовка, полезной нагрузки (claims) и подписи или MAC. Проверив подпись и целостность, система принимает решение об авторизации.

  • Подпись: асимметричная (RS/EC) или симметричная (HMAC).

  • Стандартные claims: iss, sub, aud, exp, iat, nbf.

  • Пользовательские claims: роли, разрешения, контекстные сведения.

Модели авторизации: роли, атрибуты, политики

  • RBAC — доступ по ролям (роль агрегирует разрешения).

  • ABAC — доступ по атрибутам субъекта, объекта и контекста.

  • PBAC/Policy-based — доступ по политикам (правила, написанные на DSL/языке политик).

Жизненный цикл токенов: срок, обновление, отзыв

Безопасная работа с токенами требует управления жизненным циклом:

  • TTL — короткие сроки уменьшают окно атаки.

  • Refresh token — отдельный долгоживущий токен для обновления доступа.

  • Отзыв — механизмы немедленной блокировки (чёрные списки, ротация ключей, версии сессий).

  • Ротация ключей — периодическая смена криптоключей и публикация их через JWKS.

SSO и федерация

Единый вход позволяет пользователю аутентифицироваться один раз и получать доступ к нескольким приложениям. Федерация связывает доверенные домены: один выступает как поставщик идентичности, другие — как потребители.

Хранение и защита секретов

Если система управляет паролями или ключами, необходимо:

  • Хэшировать пароли адаптивными алгоритмами (Argon2, PBKDF2, bcrypt), использовать соль и перец (secret pepper).

  • Изолировать секреты в защищённом хранилище (менеджер секретов, HSM).

  • Обновлять криптополитику при изменениях угроз и стандартов.

Типичные угрозы и защиты

  • Фишинг — защищайтесь MFA, проверкой доменов, обучением пользователей.

  • Перехват токенов — используйте HTTPS, ограничивайте время жизни, привязывайте к аудитории/устройству, применяйте безопасные куки.

  • Реплей-атаки — nonce, одноразовые коды, короткий TTL.

  • Подбор паролей — замедляющие хэши, капчи, ограничение попыток, обнаружение аномалий.

  • Утечка ключей — ротация, сегрегация, мониторинг, отозвать токены, перевыпустить ключи.

Принципы проектирования политики доступа

  • Минимально необходимые привилегии — выдавайте только те права, что нужны для задачи.

  • Подотчётность — каждое действие должно быть атрибутировано субъекту.

  • Разделение обязанностей — критичные операции требуют участия нескольких ролей.

  • Прозрачность — политики понятны и проверяемы.

  • Адаптивность — учитывайте риск-контекст (время, гео, устройство).

Как соединяются понятия темы

На практике цепочка выглядит так: пользователь проходит аутентификацию у поставщика идентичности (часто через OIDC), получает ID Token и Access Token. Клиент предъявляет токен доступа серверу ресурсов. Сервер проверяет подпись, срок действия и область (scope) и принимает решение об авторизации согласно ролям, атрибутам и политикам.

Last modified: 01 October 2025