Token-based authentication #
Вместо того чтобы каждый раз гонять логин и пароль, современные системы всё чаще работают по-другому: один раз проверили пользователя — выдали ему токен, и дальше он ходит уже с этим «пропуском». Это и есть token-based authentication: доступ подтверждает не пароль, а специальный токен, по сути временный цифровой ключ.
Сценарий обычно такой. Пользователь вводит логин и пароль, система проверяет, всё ли совпадает, и при успехе генерирует токен авторизации — строку символов, которая говорит: «этот человек уже прошёл аутентификацию». Дальше каждый запрос к API или приложению сопровождается этим токеном, чаще всего в HTTP-заголовке. Сервер по токену узнаёт, кто перед ним, и не заставляет пользователя каждый раз заново подтверждать пароль.
Плюс тут в том, что пароль по сети больше не катается туда-сюда при каждом запросе. Токены можно настроить так, чтобы они автоматически истекали через заданное время или отзывались при подозрительной активности. Если токен всё же утёк злоумышленнику, окно для атаки у него ограниченное — по сроку действия, а иногда ещё и по IP, устройству или другим параметрам, если включена дополнительная защита.
Сейчас чаще всего на слуху JWT (JSON Web Token). Это удобный формат токена, который хорошо прижился в REST API, мобильных и веб-приложениях. Внутри него можно хранить не только сам факт аутентификации, но и полезные данные: кто пользователь, какие у него роли, когда токен истекает и так далее.
Для распределённых систем, где куча сервисов общаются друг с другом, токенная схема — фактически стандарт. Один раз аутентифицировались — дальше быстро и без постоянных логинов ходите по разным сервисам. Особенно это критично для микросервисной архитектуры, мобильных клиентов, SPA и всего этого зоопарка фронтенда и бэкенда.
По сравнению с классической связкой «серверная сессия + cookies» токены намного гибче: их проще масштабировать, они меньше завязаны на состояние одного конкретного сервера, лучше подходят под облака и разнесённые системы. Поэтому практически все современные сервисы, которым важны и безопасность, и удобство, так или иначе приходят к token-based authentication.
