Ответ
Бэкенд проверяет подлинность JSON Web Token (JWT) с помощью нескольких ключевых механизмов, обеспечивающих его целостность и достоверность:
-
Проверка сигнатуры (Signature Verification): Это самый критичный шаг. Сервер использует секретный ключ (для алгоритмов HMAC, например, HS256) или публичный ключ (для алгоритмов RSA/ECDSA, например, RS256) для пересчета и сравнения сигнатуры токена. Если пересчитанная сигнатура не совпадает с той, что указана в токене, это означает, что токен был изменен или подделан.
import jwt from jwt.exceptions import InvalidSignatureError, DecodeError secret_key = 'your-super-secret-key' token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c' try: # 'verify_signature=True' по умолчанию, но можно явно указать decoded_payload = jwt.decode(token, secret_key, algorithms=['HS256'], verify_signature=True) print("Токен действителен:", decoded_payload) except InvalidSignatureError: print("Ошибка: Неверная сигнатура токена.") except DecodeError as e: print(f"Ошибка декодирования токена: {e}") except Exception as e: print(f"Неизвестная ошибка: {e}")
-
Проверка стандартных полей (Claims Validation): Бэкенд проверяет стандартные поля (claims) в полезной нагрузке токена, чтобы убедиться в его актуальности и соответствии ожиданиям:
exp
(expiration time): Проверяет, не истек ли срок действия токена. Токен считается недействительным, еслиexp
в прошлом.nbf
(not before): Убеждается, что токен не используется до указанного времени.iss
(issuer): Проверяет, кто выпустил токен, чтобы убедиться, что он пришел от доверенного источника.aud
(audience): Подтверждает, что токен предназначен для данного сервиса или приложения.iat
(issued at): Время выпуска токена, полезно для определения возраста токена.
-
Проверка формата токена: JWT должен состоять из трех частей (заголовок, полезная нагрузка, сигнатура), разделенных точками, и каждая часть должна быть корректно закодирована в Base64 URL-safe. Неправильный формат указывает на повреждение или подделку.
-
Проверка отозванных токенов (Revocation List / Blacklist): Для обеспечения дополнительной безопасности, особенно при выходе пользователя из системы или компрометации токена, бэкенд может проверять, не находится ли токен в списке отозванных (blacklist) или не был ли его
jti
(JWT ID) помечен как недействительный в базе данных. -
Проверка алгоритма (Algorithm Mismatch Protection): Сервер должен явно указывать, какие алгоритмы шифрования он ожидает. Это предотвращает атаки, при которых злоумышленник изменяет поле
alg
в заголовке токена наnone
, пытаясь обойти проверку сигнатуры.