Maison > Article > développement back-end > Impossible de vérifier le jeton JWT
L'éditeur php Xigua vous présente un problème courant : impossible de vérifier le jeton JWT. JWT (JSON Web Token) est un standard ouvert d'authentification et d'autorisation. Cependant, parfois dans les applications PHP, nous pouvons rencontrer des problèmes liés à l'impossibilité de valider les jetons JWT. Cela peut être dû à un certain nombre de raisons, telles qu'une incompatibilité de clé, l'expiration du jeton, etc. Cet article expliquera en détail les causes possibles de ce problème et fournira des solutions pour vous aider à vérifier avec succès les jetons JWT.
Tout ce que je veux faire est de générer une nouvelle clé, de créer le jeton jwt, puis de le vérifier.
package main import ( "crypto/ecdsa" "crypto/elliptic" "crypto/rand" "crypto/x509" "encoding/base64" "fmt" "log" "time" "github.com/golang-jwt/jwt/v4" ) func main() { key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) if err != nil { log.Fatalln(err) return } privateK, err := x509.MarshalECPrivateKey(key) if err != nil { log.Fatalln(err) return } claims := jwt.MapClaims{} claims["authorized"] = true claims["user_id"] = 10 claims["exp"] = time.Now().Add(time.Hour * time.Duration(1)).Unix() t := jwt.NewWithClaims(jwt.SigningMethodES256, claims) tokenStr, err := t.SignedString(key) if err != nil { log.Fatalln(err) return } fmt.Printf("Secret: %s\n", base64.StdEncoding.EncodeToString(privateK)) fmt.Printf("Token: %s\n", tokenStr) // Validate token _, err = jwt.Parse(tokenStr, func(token *jwt.Token) (interface{}, error) { if _, ok := token.Method.(*jwt.SigningMethodECDSA); !ok { return nil, fmt.Errorf("unexpected signing method %v", token.Header["alg"]) } return key, nil }) if err != nil { log.Fatalf("Token is invalid %v", err) } else { fmt.Println("Token is valid") } }
J'ai eu token is invalid: key is of invalid type
. Qu'ai-je fait de mal?
Selon Documentation
La méthode de signature ECDSA (ES256, ES384, ES512) nécessite *ecdsa.PrivateKey pour la signature et *ecdsa.PublicKey pour la vérification
Votre keyfunc
keyfunc
返回一个 * edcsa.PrivateKey
与上面的不匹配。要修复此问题,请将 return key, nil
更改为 return &key.PublicKey, nil
renvoie un * edcsa.PrivateKey
qui ne correspond pas à ce qui précède. Pour résoudre ce problème, remplacez return key, nil
par return &key.PublicKey, nil
(playground).
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!