(Golang)JWT签名验证问题

时间:2016-03-11 21:16:47

标签: go jwt

我试图了解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 个答案:

答案 0 :(得分:5)

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

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