亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號