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

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

如何使用小小令牌解碼 JWT 令牌

如何使用小小令牌解碼 JWT 令牌

Go
一只甜甜圈 2022-09-12 16:11:40
我們有一個需要解碼的JWT令牌,問題是我們正在使用TinyGo并且不支持某些庫,對于已經支持的TinyGo /核心Go庫,如何完成?我想打印“名稱”值:我無法獲得名稱,有什么想法嗎?func main() {    token := `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c`    base64String := base64.StdEncoding.EncodeToString([]byte(token))    decodedData, err := base64.StdEncoding.DecodeString(base64String)    if err != nil {        panic(err)    }    name := decodedData["name"]    fmt.Println(name)}解碼后的令牌為:PAYLOAD{  "sub": "1234567890",  "name": "John Doe",  "iat": 1516239022}請參閱此示例令牌,網址為https://jwt.io
查看完整描述

1 回答

?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

解碼和獲取零件很容易。但這并不能確保令牌有效,這意味著令牌的所有者確實是名稱所說的!name

JWT 令牌僅包含標頭、有效負載和簽名部分的 base64 編碼形式,通過 .因此,只需將令牌拆分為 ,解碼 base64 字符串,您就可以使用 json。Unmarshal() 將標題和播放加載部分轉換為地圖或結構。..

您必須驗證簽名以確保名稱有效。如果您不執行簽名驗證,則令牌很容易被偽造為任何人。簽名驗證正是 JWT 庫所做的(除了解析和生成令牌)。如何做到這一點,檢查JWT庫的來源。我也相信有一些開源庫可以處理JWT令牌,這些令牌也可以與tiny-go一起使用。

用于解碼部件并打印的示例代碼:name

token := `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c`

for i, part := range strings.Split(token, ".") {

    fmt.Printf("[%d] part: %s\n", i, part)

    decoded, err := base64.RawURLEncoding.DecodeString(part)

    if err != nil {

        panic(err)

    }

    fmt.Println("decoded:", string(decoded))

    if i != 1 {

        continue // i == 1 is the payload

    }


    var m map[string]interface{}

    if err := json.Unmarshal(decoded, &m); err != nil {

        fmt.Println("json decoding failed:", err)

        continue

    }

    if name, ok := m["name"]; ok {

        fmt.Println("name:", name)

    }

}

哪些輸出(在Go游樂場上嘗試):


[0] part: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

decoded: {"alg":"HS256","typ":"JWT"}

[1] part: eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ

decoded: {"sub":"1234567890","name":"John Doe","iat":1516239022}

name: John Doe

[2] part: SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

decoded: I?J?IH?(]?O????~?:N?%_?u,×


查看完整回答
反對 回復 2022-09-12
  • 1 回答
  • 0 關注
  • 124 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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