Das JWT-Token konnte nicht überprüft werden

WBOY
Freigeben: 2024-02-09 08:00:21
nach vorne
533 Leute haben es durchsucht

无法验证 JWT 令牌

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.

Frageninhalt

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")
    }
}
Nach dem Login kopieren

Ich habe token is invalid: key is of invalid type. Was habe ich falsch gemacht?

Lösung

Laut Dokumentation

Die ECDSA-Signaturmethode (ES256, ES384, ES512) erfordert *ecdsa.PrivateKey zum Signieren und *ecdsa.PublicKey zur Verifizierung

Ihr keyfunckeyfunc 返回一个 * 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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!