Руководства

Base64URL и JWT: декодировать не значит доверять

JWT использует Base64URL. Читать payload можно, доверять можно только после проверки.

Три части

Подписанный JWT обычно содержит header, payload и signature, разделенные точками.

Два символа меняются

Base64URL заменяет + на - и / на _. JWT также убирает завершающий padding =.

Чтение не проверяет

Можно прочитать iss, sub, aud или exp. Но это не доказывает подпись и издателя. Сервер должен проверить подпись или MAC правильным ключом.

Следите за alg

Приложение само задает допустимые алгоритмы. Неожиданный alg должен вести к ошибке проверки.

Порядок отладки

Разделите по точкам, декодируйте первые две части как Base64URL, при необходимости добавьте padding, затем проверьте подпись, issuer, audience и время.

Технические источники