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