我正在建立存取、刷新令牌邏輯,並且我想檢查存取令牌是否有效(未編輯),即使它已過期。如果令牌過期,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中文網其他相關文章!