Maison >développement back-end >Golang >Comment JWT résout-il la validité des revendications et les erreurs ?

Comment JWT résout-il la validité des revendications et les erreurs ?

王林
王林avant
2024-02-06 11:12:03502parcourir

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

Contenu de la question

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
    }

Bonne réponse


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, VerifyJWTRenvoyer 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer