我正试图在Golang中了解JWT令牌.我正在使用github.com/dgrijalva/jwt-go.

让我措手不及的是我可以输入多个有效签名.

例如,转到http://jwt.io - 输入MySuperSecretKey以获取密码

此令牌有效:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTc3MzAyODMsInVzZXIiOiJ1c2VyMSJ9.SxshVL42DUH9e7jXUblbB_bTwKxhe4jo70DrvbQMlaU

以及这一个:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTc3MzAyODMsInVzZXIiOiJ1c2VyMSJ9.SxshVL42DUH9e7jXUblbB_bTwKxhe4jo70DrvbQMlaV

事实上,如果我将最后一个字母更改为V,W或X,我会收到"Signature Verfied"消息.

谁能告诉我这里发生了什么?



1> davidkomer..:

它是签名的Base64编码,可以将最后一个字母更改为某些目标,而不会影响相关位.

尝试将两个签名弹出到base64->十六进制解码器中,您将获得相同的结果.事实上,在https://conv.darkbyte.ru/,两个签名都被重新评估为base64 SxshVL42DUH9e7jXUblbBbTwKxhe4jo70DrvbQMlaQ ==