Heim >Backend-Entwicklung >Golang >Das JWT-Token konnte nicht überprüft werden
php-Editor Xigua stellt Ihnen ein häufiges Problem vor: JWT-Token kann nicht überprüft werden. JWT (JSON Web Token) ist ein offener Standard für Authentifizierung und Autorisierung. Allerdings kann es bei PHP-Anwendungen manchmal zu Problemen kommen, da JWT-Tokens nicht validiert werden können. Dies kann verschiedene Gründe haben, z. B. Schlüsselkonflikt, Token-Ablauf usw. In diesem Artikel werden die möglichen Ursachen dieses Problems ausführlich erläutert und Lösungen bereitgestellt, die Ihnen bei der erfolgreichen Überprüfung von JWT-Tokens helfen.
Alles, was ich tun möchte, ist, einen neuen Schlüssel zu generieren, das JWT-Token zu erstellen und es dann zu überprüfen.
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") } }
Ich habe token is invalid: key is of invalid type
. Was habe ich falsch gemacht?
Laut Dokumentation
Die ECDSA-Signaturmethode (ES256, ES384, ES512) erfordert *ecdsa.PrivateKey zum Signieren und *ecdsa.PublicKey zur Verifizierung
Ihr keyfunc
keyfunc
返回一个 * edcsa.PrivateKey
与上面的不匹配。要修复此问题,请将 return key, nil
更改为 return &key.PublicKey, nil
gibt einen * edcsa.PrivateKey
zurück, der nicht mit dem Obigen übereinstimmt. Um dies zu beheben, ändern Sie return key, nil
in return &key.PublicKey, nil
(playground).
Das obige ist der detaillierte Inhalt vonDas JWT-Token konnte nicht überprüft werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!