为了账号安全,请及时绑定邮箱和手机立即绑定

JWT Go/Golang base64 编码负载产生不同的结果

JWT Go/Golang base64 编码负载产生不同的结果

Go
收到一只叮咚 2023-07-26 13:42:11
我有以下 JWT 有效负载: {"exp": 4724377561}(100 年后的某个日期)在 Go 中对其进行编码会产生ewogICAiZXhwIjogNDcyNDM3NzU2MQp9 使用jwt.io 的编码,但eyJleHAiOjQ3MjQzNzc1NjF9在签名时会产生不同的签名。我在测试装置中使用 jwt.io 的签名。我不想使用第 3 方 JWT 工具,以保持我的依赖性较小。我怀疑某种字符编码是这里的问题。为了保持测试的可读性,我在装置中使用纯文本 JSON。我使用测试装置的方式如下(省略其他测试用例):import (    "encoding/base64"    "reflect"    "testing")var testData = []struct {    name      string    header    string    payload   string    signature string    pass      bool    errorType reflect.Type}{{    name:      "Succeed if token not expired",    header:    `{"typ":"JWT","alg":"HS256"}`,    payload:   `{"exp": 4724377561}`,    signature: "JHtMKvPSMa5BD22BsbxiP1-ELRh1XkIKkarRSev0ZjU",    pass:      true,}}func TestParseJwt(t *testing.T) {    HmacSecret = []byte("My super secret key")    for _, tst := range testData {        jwt64 :=            base64.RawURLEncoding.EncodeToString([]byte(tst.header)) + "." +            base64.RawURLEncoding.EncodeToString([]byte(tst.payload)) + "." +            tst.signature        _, err := ParseJwt(jwt64)        if tst.pass {            if err != nil {                t.Fatal(tst.name, err)            }        } else {            // If an error was expected to be thrown, assert that it is the correct one.            if reflect.TypeOf(err).String() != tst.errorType.String() {                t.Fatal(tst.name, err)            }        }    }}
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

区别仅在于库在应用 Base64 编码之前“压缩”JSON。


看这个例子:


ss := []string{

    `{"exp": 4724377561}`,

    `{"exp":4724377561}`,

}

for _, s := range ss {

    fmt.Println(base64.RawURLEncoding.EncodeToString([]byte(s)), s)

}

输出(在Go Playground上尝试):


eyJleHAiOiA0NzI0Mzc3NTYxfQ {"exp": 4724377561}

eyJleHAiOjQ3MjQzNzc1NjF9 {"exp":4724377561}

第二个输出符合您的预期。要删除 Go 中无关紧要的空格,请使用json.Compact。


查看完整回答
反对 回复 2023-07-26
?
动漫人物

TA贡献1815条经验 获得超10个赞


ewogICAiZXhwIjogNDcyNDM3NzU2MQp9

被解码为

{
"exp": 4724377561
}

而 jwt.io 字符串被解码为

{"exp":4724377561}
查看完整回答
反对 回复 2023-07-26
  • 2 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信