首頁 >後端開發 >Golang >JWT 如何解析宣告有效性和錯誤?

JWT 如何解析宣告有效性和錯誤?

王林
王林轉載
2024-02-06 11:12:03477瀏覽

JWT 如何解析声明有效性和错误?

問題內容

我正在建立存取、刷新令牌邏輯,並且我想檢查存取令牌是否有效(未編輯),即使它已過期。如果令牌過期,Go 將傳回錯誤並使令牌無效。因此,我檢查給定的錯誤是否與 ErrTokenExpired 相符。

我可以 100% 確定如果令牌無效,那麼 err 不會為零,這樣我就可以刪除 if !tkn.Valid{... 嗎?

這通常是一個好的方法還是編輯的令牌可以通過我的驗證?

func VerifyJWT(jwtString, secret string) (*jwt.Token, *Claims, error) {
    claims := &Claims{}
    tkn, err := jwt.ParseWithClaims(jwtString, claims, func(token *jwt.Token) (interface{}, error) {
        return []byte(os.Getenv(secret)), nil
    })
    return tkn, claims, err
}
_, accClaims, err1 := VerifyJWT(req.Access, "ACCESS_SECRET")
    if err1 != nil && err1.Error()[:16] != jwt.ErrTokenExpired.Error()[:16] {
        WriteJSON(w, http.StatusBadRequest, APIError{Error: "invalid token access" + err1.Error()})
        return
    }

正確答案


如果您的程式碼中有兩點,jwt 令牌是安全的:

1-選擇好的演算法
2-創建隨機密鑰

如果token改變或超時,這兩個選擇可以幫助你,VerifyJWT回傳錯誤!

注意:總是需要檢查錯誤,並向客戶端傳回良好的回應。

注意(改進您的程式碼):要檢查一個錯誤是否為 ErrTokenExpired,請使用 errors pkg。

你的例子:

// import "errors"


_, accClaims, err := VerifyJWT(req.Access, "ACCESS_SECRET")
if errors.Is(err, jwt.ErrTokenExpired) {
        // continue progress
}

if err != nil {
    WriteJSON(w, http.StatusUnauthorized, APIError{Error: err.Error()})
    return
}

以上是JWT 如何解析宣告有效性和錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除