Maison >développement back-end >Golang >Comment JWT résout-il la validité des revendications et les erreurs ?
Je crée un accès, actualise la logique du jeton et je souhaite vérifier si le jeton d'accès est valide (non modifié) même s'il a expiré. Si le jeton expire, Go renverra une erreur et invalidera le jeton. Je vérifie donc si l'erreur donnée correspond à ErrTokenExpired.
Puis-je être sûr à 100 % que si le jeton n'est pas valide, l'erreur ne sera pas nulle afin que je puisse le supprimer if !tkn.Valid{...
?
Est-ce généralement une bonne approche ou le jeton modifié réussira-t-il ma vérification ?
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 }
les jetons jwt sont sûrs si vous avez deux points dans votre code :
1-Choisissez un bon algorithme
2- Créez une clé aléatoire
Si le jeton change ou expire, ces deux options peuvent vous aider, VerifyJWT
Renvoyer une erreur !
Remarque : il faut toujours vérifier les erreurs et renvoyer une bonne réponse au client.
Remarque (améliorez votre code) : Pour vérifier si une erreur est ErrTokenExpired, utilisez errors
pkg.
Votre exemple :
// 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 }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!