Разбираемся, что такое токены, для чего они используются в кибербезопасности, какие бывают виды и как они работают.
Что такое токены
В IT у слова «токен» есть два значения. Первое — это минимальная единица кода, основа основ любого языка программирования (например, оператор if, разделитель в виде точки или оператор умножения). Второе значение — токен как инструмент идентификации, авторизации и аутентификации. В этой статье речь пойдет именно о втором.
Такой токен — это идентификатор, который подтверждает личность пользователя или подлинность приложения, а также определяет, что им разрешено делать в системе. Здесь — примеры действий, для которых постоянно используются токен:
- вход на сайт или в приложение;
- уведомления из приложений;
- работа с API;
- онлайн-платежи;
- авторизация приложений, перенос данных из одного сервиса в другой;
- одноразовые действия вроде подтверждения платежа или сброса пароля.
Токены существуют как в цифровом формате, так и в виде физического устройства (например, USB-ключи и смарт-карты). Последние часто используются для авторизации в корпоративных системах: например, чтобы просмотреть документ договора, сотрудник должен вставить в компьютер USB-флешку, на которой хранится криптографический ключ. Затем пользователь вводит PIN-код, и система запрашивает у токена подтверждение личности.
Виды токенов
Пользовательский токен (user token)
Такой токен позволяет обращаться к сервисам от имени пользователя и работать с его данными: читать почту, загружать файлы, изменять профиль и так далее. Технически user token содержит информацию о владельце (например, ID пользователя, список разрешений), подписанную зашифрованным ключом сервера, и привязан к конкретной учетной записи.
Токен авторизации (auth token или access token)
Авторизация по токену работает как временный пропуск в систему: пользователь вводит логин и пароль, и после этого сервер генерирует уникальный код и отправляет его клиенту. Такой токен, как правило, действует ограниченное время — когда он истекает, новый access-токен запрашивает refresh token.
По механике auth token напоминает cookie-файлы. Разница в том, что куки привязаны к браузеру, а токен можно хранить и передавать где угодно. При работе с куки сервер также хранит таблицу активных сессий и проверяет каждого залогиненного пользователя. В токенах же нужные данные уже зашиты внутри, и серверу остается только проверить их подлинность и срок действия.
API-токен
Такие токены выдаются для работы по API, то есть с внешними сервисами и приложениями. API-токены авторизуют запросы, чтобы сервис понимал, что они исходят от доверенного клиента. Например, разработчики приложения, которое расшифровывает аудиозаписи, хотят подключить к своему сервису ChatGPT, чтобы нейросеть автоматически делила полученный текст на абзацы. По токену можно задать лимиты: сколько запросов в минуту разрешено, какие именно функции доступны по API и как долго будет действовать доступ.
Токен приложения (app token)
Если API-токен нужен для авторизации запросов от клиента к серверу, то токен приложения идентифицирует, что запрос исходит от конкретного приложения, и проверяет, что оно не поддельное.
Одноразовые токены
Действуют всего один раз и недолго живут. Обычно такие токены нужны для действий, требующих большей безопасности: например, для сброса пароля или подтверждения платежа.
Как работает JWT-токен
Самый популярный формат токенов в вебе — это JWT (JSON Web Token), который представляет собой строку в формате header.payload.signature. Header описывает алгоритм подписи, payload содержит данные о пользователе или сервисе, а signature подтверждает подлинность токена с помощью криптографической подписи.
Первые две части JWT-токена, header и payload, кодируются с помощью Base64URL. Это значит, что содержимое токена можно легко сделать человекочитаемым: любой пользователь сможет посмотреть, что за данные хранятся внутри. А вот изменить их без секретного ключа уже не получится.
Коротко — для чего нужен токен
- Авторизация на сайте или ресурсе.
- Аутентификация (проверка личности) пользователя.
- Разграничение прав доступа. Например, одному пользователю можно выдать токен только на чтение данных, а другому — на редактирование.
- Снижение нагрузки на пользователя. Благодаря токенам пользователю не приходится каждый раз вводить логин и пароль.
- Безопасность. Токены можно ограничивать по времени действия, устройству, IP-адресу и так далее.
- Общение между разными серверами и приложениями.