Django JWT изменен, но все еще действителен
У меня есть проект, в котором я проверял подлинность токена, сгенерированного библиотекой rest_framework_simplejwt. Играя с токеном, я изменил последний символ с 8 на 9, и он заработал. Я не могу понять, почему и как это произошло.
Мой оригинальный токен:
{
"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzA3MDY0NTc1LCJpYXQiOjE3MDcwNjA5NzUsImp0aSI6IjBhNDEyY2M5NjIwYjQxYzJhZDI5NzFhNzZkZGJhOGJhIiwidXNlcl9pZCI6NH0.jvylGlq3qkJPhvBkhbsqFPakwyMS7BBDwB-bMIAzWq8"
}
Утраченный, но действительный токен:
{
"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzA3MDY0NTc1LCJpYXQiOjE3MDcwNjA5NzUsImp0aSI6IjBhNDEyY2M5NjIwYjQxYzJhZDI5NzFhNzZkZGJhOGJhIiwidXNlcl9pZCI6NH0.jvylGlq3qkJPhvBkhbsqFPakwyMS7BBDwB-bMIAzWq9"
}
Фокусировка на последнем символе лексемы. Есть мнения?
Как проверить подлинность токена?
Токен JWT состоит из 3 частей: HEADER, PAYLOAD и SIGNATURE.
Вы изменяете часть SIGNATURE, и если ваш токен все еще действителен, это означает, что вы не проверяете подпись.
Вот ссылка на статью, которая объясняет этот вопрос. Расшифровка аномалии JWT: когда изменение последнего символа токена не нарушает верификацию