我在 golang 中使用 jwt-go 庫,并使用HS512算法對令牌進行簽名。我想確保令牌有效并且文檔中的示例是這樣的:token, err := jwt.Parse(myToken, func(token *jwt.Token) (interface{}, error) { return myLookupKey(token.Header["kid"])})if err == nil && token.Valid { fmt.Println("Your token is valid. I like your style.")} else { fmt.Println("This token is terrible! I cannot accept this.")}我知道這myToken是字符串令牌,并且keyFunc得到了解析的令牌,但我不明白應(yīng)該做什么myLookupKey 函數(shù)?,并且當(dāng)我將它打印到控制臺時token.Header沒有kid值,甚至認(rèn)為令牌具有所有我放進去的數(shù)據(jù),token.Valid總是假的。這是一個錯誤嗎?如何驗證令牌是否有效?
1 回答

青春有我
TA貢獻1784條經(jīng)驗 獲得超8個贊
本keyFunc應(yīng)該返回私鑰圖書館應(yīng)使用來驗證令牌的簽名。您如何獲得此密鑰完全取決于您。
文檔中的示例顯示了jwt-go 庫提供的非標(biāo)準(zhǔn)(未在RFC 7519 中定義)附加功能。使用kid標(biāo)頭中的字段(密鑰 ID 的縮寫),客戶端可以指定令牌使用哪個密鑰進行簽名。在驗證時,您可以使用密鑰 ID 查找(可能是多個)已知密鑰之一(如何以及是否實施此密鑰查找取決于您)。
如果您不想使用此功能,請不要使用。只需從 返回一個靜態(tài)字節(jié)流,而keyFunc無需檢查令牌標(biāo)頭:
token, err := jwt.Parse(myToken, func(token *jwt.Token) (interface{}, error) {
key, err := ioutil.ReadFile("your-private-key.pem")
if err != nil {
return nil, errors.New("private key could not be loaded")
}
return key, nil
})
- 1 回答
- 0 關(guān)注
- 242 瀏覽
添加回答
舉報
0/150
提交
取消