0
我想解碼(不驗證)JWT令牌並從其正文讀取值。我的代碼的這部分內容也涉及非JWT令牌。所以我需要處理普通令牌(可以說一些字符串)和JWT令牌。解析字符串和子字符串
爲了達到這個目的,我使用「。」來分割標記。閱讀JWT體值,但問題是「索引超出範圍」時,我得到非JWT令牌(不」的。)
package main
import (
"fmt"
"strings"
"encoding/base64"
"encoding/json"
)
func main() {
token := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ"
//nonJwtToken := "xxxxxxx"
// below line should gracefull throw error if it passed nonJwtToken
data, err := base64.RawURLEncoding.DecodeString(strings.Trim(strings.Split(token, ".")[1], "."))
if err !=nil {
fmt.Printf("error rahu : " , err)
}
var result map[string]interface{}
err = json.Unmarshal(data, &result)
fmt.Println(result["name"])
fmt.Println(err)
}
請注意,我不是試圖驗證JWT ,我所做的只是解碼JWT並從中讀取值。
任何建議,將不勝感激。
用途是'strings.Contains'檢測'.',或只檢查從'strings.Split'返回的長度,而不是隻引用索引。 – RayfenWindspear
另一個說明。您不應該直接索引片返回值而不驗證是否有足夠的元素用於索引成功。最終,如果不採取適當的預防措施,您將會使程序崩潰。 – RayfenWindspear