Каким образом Backend определяет поддельный JWT
Python
Senior
VK
Каким образом Backend определяет поддельный JWT
Ответы
Backend проверяет JWT на подлинность несколькими способами:
- **Проверка сигнатуры** - самая важная часть. Используется секретный ключ (для HMAC) или публичный ключ (для RSA/ECDSA) для верификации подписи токена. Если сигнатура не совпадает - токен поддельный.
```
import jwt
from jwt.exceptions import InvalidSignatureError
try:
decoded = jwt.decode(token, 'secret_key', algorithms=['HS256'])
except InvalidSignatureError:
print("Invalid token signature")
```
- **Проверка стандартных claims**:
- `exp` (expiration) - время жизни токена
- `nbf` (not before) - токен нельзя использовать раньше
- `iss` (issuer) - кто выпустил токен
- `aud` (audience) - для кого предназначен
- **Проверка формата токена** - должен состоять из 3 частей (header.payload.signature), разделенных точками, и быть правильно закодирован в base64.
- **Проверка отозванных токенов** - через blacklist или проверку jti (JWT ID) в базе.
- **Проверка алгоритма** - защита от атак, когда злоумышленник меняет алгоритм на 'none'.