Base64URL и JWT: декодировать не значит доверять
JWT использует Base64URL. Читать payload можно, доверять можно только после проверки.
Три части
Подписанный JWT обычно содержит header, payload и signature, разделенные точками.
Два символа меняются
Base64URL заменяет + на - и / на _. JWT также убирает завершающий padding =.
Чтение не проверяет
Можно прочитать iss, sub, aud или exp. Но это не доказывает подпись и издателя. Сервер должен проверить подпись или MAC правильным ключом.
Следите за alg
Приложение само задает допустимые алгоритмы. Неожиданный alg должен вести к ошибке проверки.
Порядок отладки
Разделите по точкам, декодируйте первые две части как Base64URL, при необходимости добавьте padding, затем проверьте подпись, issuer, audience и время.