mock_sobes
← Auth — JWT
middle correct_vs_wrong #136
Два варианта декодирования JWT в Python. Какой безопасный?
Вариант 1
import jwt
def get_user_id(token: str) -> int:
    # быстро и без секрета — у нас же микросервис, гейтвей уже проверил
    data = jwt.decode(token, options={"verify_signature": False})
    return int(data["sub"])
Вариант 2
import jwt
from jwt import InvalidTokenError, ExpiredSignatureError

def get_user_id(token: str, *, secret: str) -> int:
    try:
        data = jwt.decode(
            token,
            secret,
            algorithms=["HS256"],   # явный список!
            options={"require": ["exp", "sub"]},
        )
    except ExpiredSignatureError:
        raise PermissionError("token expired")
    except InvalidTokenError as e:
        raise PermissionError(f"invalid token: {e}")
    return int(data["sub"])
Чтобы решить вопрос и сохранить попытку — войди.