Tidak dapat mengesahkan token JWT
Feb 09, 2024 am 08:00 AMeditor php Xigua memperkenalkan anda kepada masalah biasa: Tidak dapat mengesahkan token JWT. JWT (JSON Web Token) ialah standard terbuka untuk pengesahan dan kebenaran. Walau bagaimanapun, kadangkala dalam aplikasi PHP, kami mungkin menghadapi masalah kerana tidak dapat mengesahkan token JWT. Ini mungkin disebabkan oleh beberapa sebab, seperti ketidakpadanan kunci, token tamat tempoh, dsb. Artikel ini akan menerangkan kemungkinan punca masalah ini secara terperinci dan menyediakan penyelesaian untuk membantu anda berjaya mengesahkan token JWT.
Kandungan soalan
Apa yang saya mahu lakukan ialah menjana kunci baharu, mencipta token jwt, dan kemudian mengesahkannya.
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") } }
Saya dapat token is invalid: key is of invalid type
. Apa yang saya buat salah?
Penyelesaian
Mengikut Dokumentasi
Kaedah tandatangan ECDSA (ES256, ES384, ES512) memerlukan *ecdsa.PrivateKey untuk menandatangani dan *ecdsa.PublicKey untuk pengesahan
keyfunc
keyfunc
返回一个 * edcsa.PrivateKey
与上面的不匹配。要修复此问题,请将 return key, nil
更改为 return &key.PublicKey, nil
anda mengembalikan * edcsa.PrivateKey
yang tidak sepadan dengan di atas. Untuk membetulkan perkara ini, tukar kunci pulang, tiada
kepada
Atas ialah kandungan terperinci Tidak dapat mengesahkan token JWT. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

GO Language Pack Import: Apakah perbezaan antara garis bawah dan tanpa garis bawah?

Bagaimana saya menulis objek dan stub untuk ujian di GO?

Bagaimana untuk melaksanakan pemindahan maklumat jangka pendek antara halaman dalam kerangka beego?

Bagaimana saya boleh menggunakan alat pengesanan untuk memahami aliran pelaksanaan aplikasi saya?

Bagaimana anda menulis ujian unit di GO?

Bagaimana cara menukar senarai hasil pertanyaan mysql ke dalam slice struktur tersuai dalam bahasa Go?

Bagaimana saya boleh menentukan kekangan jenis tersuai untuk generik di GO?

Bagaimana cara menulis fail dalam bahasa Go dengan mudah?
