Maison > Article > développement back-end > Erreur de validation du jeton go-jwt - signature du jeton non valide : type de clé non valide
L'éditeur PHP Zimo peut rencontrer le message d'erreur : "Signature de jeton invalide : type de clé invalide" lors de l'utilisation de go-jwt pour la vérification du jeton. Cette erreur est due à une inadéquation entre la signature du jeton et le type de clé. La signature du jeton est un élément important de la validation du jeton et le type de clé spécifie l'algorithme utilisé pour générer et vérifier la signature. Pour résoudre ce problème, nous devons nous assurer que l'algorithme de signature du jeton est cohérent avec le type de clé. Ensuite, nous détaillerons comment configurer et utiliser correctement go-jwt pour éviter cette erreur.
Une erreur s'est produite
token signature is invalid: key is of invalid type
Lorsque vous essayez de vérifier le jeton jwt. Utilisez la bibliothèque golang-jwt (v5).
Voici comment je génère le jeton :
const ( secretkey = "162475e134198bd451af0b88a5defe132c72cb26fd58449772883b90c498b484" tokenlifespan = 4 ) func generatetoken() (string, error) { claims := jwt.mapclaims{} claims["authorized"] = true claims["foo"] = "bar" claims["exp"] = time.now().add(time.hour * time.duration(tokenlifespan)).unix() token := jwt.newwithclaims(jwt.signingmethodhs256, claims) return token.signedstring([]byte(secretkey)) }
Voici le jeton généré :
Voici comment je vérifie le jeton :
func ValidateToken(c *gin.Context) error { token, err := GetToken(c) if err != nil { return err } _, ok := token.Claims.(jwt.MapClaims) if ok && token.Valid { return nil } return errors.New("invalid token provided") } func GetToken(c *gin.Context) (*jwt.Token, error) { tokenString := getTokenFromRequest(c) token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"]) } return token, nil }) return token, err } func getTokenFromRequest(c *gin.Context) string { bearerToken := c.Request.Header.Get("Authorization") splitToken := strings.Split(bearerToken, " ") if len(splitToken) == 2 { return splitToken[1] } return "" }
Des suggestions pour le faire fonctionner ? Qu'est-ce que je rate? Merci.
keyfunc Utilisez la méthode par analyse comme fonction de rappel pour fournir la clé de vérification. Il devrait donc renvoyer une clé au lieu du paramètre token *jwt.token
.
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"]) } - return token, nil + return []byte(secretKey), nil })
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!