我的应用程序正在使用JWT,并且应防止重放攻击。我正在对此进行测试,然后遇到了以下问题。
当我拥有有效的JWT并更改令牌/签名的最后一个字符时,JWT仍然有效。例如,以下令牌都可以正确验证:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJTb21lIFRlc3QiLCJjbGFpbSI6IlNvbWUgQ2xhaW0ifQ.UkFYSK7hSSeiqUOSMdbXgbOErMFnuK0Emk1722ny-r4 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJTb21lIFRlc3QiLCJjbGFpbSI6IlNvbWUgQ2xhaW0ifQ.UkFYSK7hSSeiqUOSMdbXgbOErMFnuK0Emk1722ny-r5 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJTb21lIFRlc3QiLCJjbGFpbSI6IlNvbWUgQ2xhaW0ifQ.UkFYSK7hSSeiqUOSMdbXgbOErMFnuK0Emk1722ny-r6 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJTb21lIFRlc3QiLCJjbGFpbSI6IlNvbWUgQ2xhaW0ifQ.UkFYSK7hSSeiqUOSMdbXgbOErMFnuK0Emk1722ny-r7
我已经在http://jwt.io/上进行了检查,并且也可以在我的.Net应用程序中进行复制。
有人可以解释一下签名对于给定的有效负载而言可能不是唯一的吗?我知道可能会发生冲突,但是我无法解释它们是连续的序列。
在这种特殊情况下,您将更改签名的base64 url编码,而不是签名本身
第四个base64值编码相同的二进制值。尝试在http://kjur.github.io/jsjws/tool_b64udec.html转换为十六进制
您将看到的价值是
52415848aee14927a2a9439231d6d781b384acc167b8ad049a4d7bdb69f2fabe
如果将后缀更改为-r1
或,-r8
则二进制值更改,并且签名验证将失败
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句