Каким образом можно отменить или аннулировать access token в системе?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
Access token обычно живёт недолго и сам по себе «отзывается» не всегда, поэтому его аннулирование делают через серверную логику. На практике используют короткий TTL, отзыв refresh token, blacklist/denylist для токенов или смену секретов подписи. Конкретный способ зависит от того, JWT это или opaque token, и есть ли у системы состояние на сервере.
Определение:
Отменить access token — значит сделать так, чтобы он больше не давал доступ к защищённым ресурсам до истечения срока жизни. Для opaque token это часто делается через проверку статуса токена в хранилище. Для JWT, который самодостаточен, обычно применяют дополнительные механизмы: короткий срок жизни, список отозванных токенов, ротацию ключей или инвалидирование связанных refresh token.
Пример использования:
Например, пользователь нажал «Выйти» на всех устройствах. Сервер помечает его refresh token как отозванный и добавляет текущий access token в denylist до окончания его TTL. После этого новые токены по refresh token уже не выдаются, а старый access token перестаёт приниматься.
# Упрощённый пример проверки отозванного access token
REVOKED_TOKENS = {"token-123"}
def is_token_valid(token: str) -> bool:
if token in REVOKED_TOKENS:
return False
return True
token = "token-123"
if is_token_valid(token):
print("Access granted")
else:
print("Token revoked")
Пояснение кода:
Код не требуется для понимания механизма, но пример показывает базовую идею по шагам: сначала сервер хранит список отозванных токенов, затем при каждом запросе проверяет, есть ли текущий токен в этом списке, и если есть — отклоняет доступ. В реальной системе вместо множества в памяти чаще используют Redis или другое хранилище с TTL, чтобы запись исчезала вместе с истечением срока жизни access token.
Ключевые моменты:
- Access token часто не «удаляют», а делают недействительным для проверок на сервере.
- Самый практичный способ — отзывать refresh token и выдавать access token с коротким временем жизни.
- Для JWT обычно нужен denylist, ротация ключей или дополнительная серверная проверка.
- Для opaque token аннулирование проще: достаточно изменить статус токена в хранилище.
- На logout и при компрометации учётной записи нужно инвалидировать связанные токены.
- Чем короче TTL access token, тем меньше окно риска при его утечке.