Мое приложение использует JWT и должно предотвращать повторные атаки. Я тестировал это, столкнулся с следующим.Почему подпись JWT не уникальна для конкретной полезной нагрузки
Когда у меня есть действующий JWT и измените последний символ токена/подписи, JWT остается в силе. Например. следующая лексема делать все проверки правильности: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJTb21lIFRlc3QiLCJjbGFpbSI6IlNvbWUgQ2xhaW0ifQ.UkFYSK7hSSeiqUOSMdbXgbOErMFnuK0Emk1722ny-r4 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJTb21lIFRlc3QiLCJjbGFpbSI6IlNvbWUgQ2xhaW0ifQ.UkFYSK7hSSeiqUOSMdbXgbOErMFnuK0Emk1722ny-r5 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJTb21lIFRlc3QiLCJjbGFpbSI6IlNvbWUgQ2xhaW0ifQ.UkFYSK7hSSeiqUOSMdbXgbOErMFnuK0Emk1722ny-r6 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJTb21lIFRlc3QiLCJjbGFpbSI6IlNvbWUgQ2xhaW0ifQ.UkFYSK7hSSeiqUOSMdbXgbOErMFnuK0Emk1722ny-r7
Я проверил это на http://jwt.io/ и могу быть воспроизведен в моем .Net приложении, а также.
Может кто-нибудь объяснить, как возможно, что подпись не уникальна для данной полезной нагрузки? Я понимаю, что могут произойти столкновения, но я не могу объяснить, что они являются последовательными последовательностями.
Это неправда. Потому что вы меняете _signature_. Сама подпись, очевидно, не является частью самой подписи. Таким образом, вы можете изменить подпись и иметь действительное сообщение. Вот об этом и весь этот вопрос. По-видимому, это связано с тем, как ведет себя base64. Это означает, что у вас есть другой токен с точно такой же полезной нагрузкой с разными сигнатурами, но все они действительны. –
Я не понимаю, что «у вас все еще есть правильное сообщение». Да, вы все еще можете «декодировать» JwtHeader и JwtPayload, но процесс проверки JWT требует, чтобы «подпись» соответствовала JwtHeader и JwtPayload. Так что нет, JWT не будет считаться действительным, и библиотеки должны его отклонить. –