почему я получаю эту ошибку Неперехваченное исключение «Firebase\JWT\SignatureInvalidException» с сообщением «Ошибка проверки подписи»

Я получаю токен, и мне нужно его расшифровать. Использование JWT::decode($jwt, $key, array('HS256')) всегда вызывает ошибку. (ошибка проверки подписи)

Я нашел несколько сообщений, но они не решают мою проблему ( Firebase JWT: Ошибка проверки подписи например, есть и другие, но решения не работают). Я предполагаю, что мне не хватает чего-то очень простого здесь. Я также пробовал декодировать/кодировать URL64 ..Etc.. с моим токеном, но я все еще не могу правильно его декодировать. Когда я использую JWT.io, токен расшифровывается без проблем. Где я что-то упустил в коде ниже?

<?php
require __DIR__ . '/vendor/autoload.php';

use \Firebase\JWT\JWT;
$jwt = "eyJraWQiOiJUUyIsImFsZyI6IkhTMjU2In0.eyJzdWIiOiJsaW9uZWwiLCJvcCI6ImF1dGgiLCJsdmwiOjEsImRzaWQiOiJhZTk0ZjdiOC03YzliLTRlYWUtOTZhNy04ZjAxZWEwNTQxOTEiLCJpc3MiOiJUUyIsInBpZCI6ImxvZ2luIiwicGFyYW1zIjp7fSwic2lkIjoiODFhNmVmNWYtZjhhZi00ODk4LWIyZmUtYWM1OTBhZDQyYWEzIiwiYXVkIjoid2ViYXBwIiwicHZpZCI6InN0YXRpYyIsImV4cCI6MTU3MzAzNjUxMCwiaWF0IjoxNTczMDM0NzEwLCJqdGkiOiIzMmM4Y2YxZi0wYTE3LTQ3ZTUtOWVhNi05ZTRlZDlhZTQ4NTAiLCJkaWQiOiIxZTdjMDQwZC01ZGM5LTRlMzktYjBjYy0wMjUwZTI4ZjY0MDQifQ.KU9dpKENm1_YmBngCEnXP2XiGpCkA7sf5pmojB7TzKM";
$key = "secret";


print_r("JWT\n\n");
print_r($jwt);

$decoded = JWT::decode($jwt, $key, array('HS256'));
echo "DECODED\n";
print_r($decoded);


?>

код генерирует эту ошибку:

Неустранимая ошибка PHP: необработанное исключение «Firebase\JWT\SignatureInvalidException» с сообщением «Ошибка проверки подписи» в /var/www/html/vendor/firebase/php-jwt/src/JWT.php:112

Спасибо


person LMO    schedule 06.11.2019    source источник
comment
токен расшифровывается без проблем - токен не зашифрован, а просто закодирован base64url. Но когда я пытаюсь использовать ваш токен, как указано выше, с секретным секретом, jwt.io не может его проверить. Убедитесь, что у вас есть правильный секрет, и посмотрите, сможете ли вы подтвердить его на jwt.io (вставив токен в поле в правом столбце в разделе «Проверить подпись».   -  person jps    schedule 06.11.2019
comment
это не то, что я должен делать? вот скриншот результата ibb.co/bWL7bND   -  person LMO    schedule 06.11.2019
comment
да, но посмотрите на подпись на скриншоте (синие символы в левой колонке). Это не то же самое, что указано в вашем вопросе. Таким образом, токен и секрет в приведенном выше примере кода не совпадают. Возьмите токен, показанный на скриншоте, и попробуйте проверить его в своем коде, он должен работать.   -  person jps    schedule 06.11.2019
comment
это работает сейчас?   -  person jps    schedule 07.11.2019
comment
нет, я перепроверил все, чтобы быть уверенным. I have this token ( a new one ) : eyJraWQiOiJUUyIsImFsZyI6IkhTMjU2In0.eyJzdWIiOiJsaW9uZWwiLCJvcCI6ImF1dGgiLCJsdmwiOjEsImRzaWQiOiI2NmE0NGEzNy1iN2Q2LTQwZWEtYjMyNi1kMGRiYjAzNDUzZTIiLCJpc3MiOiJUUyIsInBpZCI6ImxvZ2luIiwicGFyYW1zIjp7fSwic2lkIjoiNjg3YTBhNDctYzVjNC00MDg1LTg4NmUtM2I5YmFkN2IzMzBkIiwiYXVkIjoid2ViYXBwIiwicHZpZCI6InN0YXRpYyIsImV4cCI6MTU3MzIwNjU4MywiaWF0IjoxNTczMjA0NzgzLCJqdGkiOiJmNDUyYjU1OS1jZjg1LTRkNjYtYmQ4Ny1kOGM1NzY3NmUzOGEiLCJkaWQiOiIxZTdjMDQwZC01ZGM5LTRlMzktYjBjYy0wMjUwZTI4ZjY0MDQifQ.nPUF1T30IsBppvgFd9UayRRlquNgqfoOUa7f4KOubF0. Вставьте его в   -  person LMO    schedule 08.11.2019
comment
jwt.io, он говорит, что неправильная подпись, когда я нажимаю на секретную кодировку base64, он переключается на проверку подписи. Я не понимаю.   -  person LMO    schedule 08.11.2019
comment
Хитрость на jwt.io заключается в том, что вы сначала вставляете секрет в поле в правом столбце, а затем вставляете токен, который хотите проверить, в левый столбец. Затем вы увидите, подтверждено получение или нет. Если вы измените секрет после вставки маркера (и нажатие на «секрет в кодировке base64» является изменением), тогда jwt.io пересчитывает подпись (синие символы после последняя точка) и говорит, что это проверено. Сначала убедитесь, что у вас есть токен, проверенный jwt.io, а затем попробуйте этот токен и секрет в своем коде. Если jwt.io не сможет это проверить, ваш код, конечно же, тоже должен дать сбой.   -  person jps    schedule 08.11.2019
comment
Спасибо, я понял трюк и подтверждаю, что он не работает. давайте сначала решим это с помощью JWT.io. Спасибо !   -  person LMO    schedule 09.11.2019