Два варианта декодирования JWT в Python. Какой безопасный?
middle
correct_vs_wrong
#136
Вариант 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"])
Чтобы решить вопрос и сохранить попытку — войди.