我试图了解Golang的JWT令牌。我正在使用github.com/dgrijalva/jwt-go。
让我措手不及的是我可以输入多个有效签名。
例如,转到http://jwt.io - 为秘密输入MySuperSecretKey
此令牌有效:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTc3MzAyODMsInVzZXIiOiJ1c2VyMSJ9.SxshVL42DUH9e7jXUblbB_bTwKxhe4jo70DrvbQMlaU
以及这一个:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTc3MzAyODMsInVzZXIiOiJ1c2VyMSJ9.SxshVL42DUH9e7jXUblbB_bTwKxhe4jo70DrvbQMlaV
事实上,如果我将最后一个字母改为V,W或X,我会得到一个" Signature Verfied"消息。
谁能告诉我这里发生了什么?
答案 0 :(得分:5)
签名的Base64编码可以将最后一个字母更改为某些目标,而不会影响相关位。
尝试将两个签名弹出到base64->十六进制解码器中,您将获得相同的结果。事实上,在https://conv.darkbyte.ru/,两个签名都被重新评估为base64 SxshVL42DUH9e7jXUblbBbTwKxhe4jo70DrvbQMlaQ ==