Heim >Backend-Entwicklung >Golang >go-jwt-Token-Validierungsfehler – ungültige Token-Signatur: Ungültiger Schlüsseltyp
Der PHP-Editor Zimo kann auf die Fehlermeldung „Ungültige Token-Signatur: Ungültiger Schlüsseltyp“ stoßen, wenn er go-jwt für die Token-Überprüfung verwendet. Dieser Fehler wird durch eine Nichtübereinstimmung zwischen der Signatur des Tokens und dem Schlüsseltyp verursacht. Die Token-Signatur ist ein wichtiger Teil der Validierung des Tokens, und der Schlüsseltyp gibt den Algorithmus an, der zum Generieren und Überprüfen der Signatur verwendet wird. Um dieses Problem zu lösen, müssen wir sicherstellen, dass der Signaturalgorithmus des Tokens mit dem Schlüsseltyp übereinstimmt. Als Nächstes erfahren Sie, wie Sie go-jwt richtig konfigurieren und verwenden, um diesen Fehler zu vermeiden.
Es ist ein Fehler aufgetreten
token signature is invalid: key is of invalid type
Beim Versuch, das JWT-Token zu überprüfen. Verwenden Sie die Bibliothek golang-jwt (v5).
So generiere ich den Token:
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)) }
Dies ist das generierte Token:
So verifiziere ich den Token:
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 "" }
Irgendwelche Vorschläge, wie es funktioniert? Was vermisse ich? Danke.
keyfunc Verwenden Sie die Methode „parse“ als Rückruffunktion, um den Bestätigungsschlüssel bereitzustellen. Es sollte also einen Schlüssel anstelle des Parameters token *jwt.token
zurückgeben.
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 })
Das obige ist der detaillierte Inhalt vongo-jwt-Token-Validierungsfehler – ungültige Token-Signatur: Ungültiger Schlüsseltyp. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!