Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Tuntutan JWT tidak disimpan selepas tandatangan token

Tuntutan JWT tidak disimpan selepas tandatangan token

王林
王林ke hadapan
2024-02-14 09:40:09626semak imbas

令牌签名后 JWT 声明不保留

editor php Banana akan memperkenalkan konsep penting dalam JWT (JSON Web Token) dalam artikel ini: tandatangan token. JWT ialah piawaian keselamatan untuk menghantar maklumat antara aplikasi web. Dalam JWT, tandatangan token ialah mekanisme untuk melindungi integriti dan ketulenan token. Sebaik sahaja token ditandatangani, sebarang gangguan atau pemalsuan token akan dikesan serta-merta. Walau bagaimanapun, kadangkala kita mungkin perlu tidak mengekalkan tandatangan tuntutan JWT dalam situasi tertentu, dan artikel ini akan menerangkan secara terperinci cara mencapai keperluan ini.

Kandungan soalan

Saya mempunyai kod berikut. Saya menggunakan tuntutan tersuai untuk mencipta token web json (menggunakan golang-jwt). Masalahnya ialah apabila saya menandatangani token menggunakan kunci (kaedah = hs256) dan kemudian menghuraikan token, tuntutan berubah. Apa kesilapan yang saya lakukan.

Kod:

package main

import (
    "fmt"
    "time"

    "github.com/golang-jwt/jwt/v4"
)

type mycustomclaims struct {
    userid int
    jwt.registeredclaims
}

func (app *config) generatejwt(userid int) {

    //code to generate jwt
    jt := jwt.newwithclaims(jwt.signingmethodhs256, mycustomclaims{
        userid,
        jwt.registeredclaims{
            expiresat: jwt.newnumericdate(time.now().add(3 * time.hour)),
            issuedat:  jwt.newnumericdate(time.now()),
        },
    })

    fmt.println("what was put", jt.claims.(mycustomclaims).userid)
    token, _ := jt.signedstring(app.secret)

    //code to check whether claims are retained
    parsed_token, _ := jwt.parsewithclaims(token, &mycustomclaims{}, func(t *jwt.token) (interface{}, error) {
        return app.secret, nil
    })

    fmt.println("what was parsed", parsed_token.claims.(*mycustomclaims).userid)

}

Output

What was put 8
What was parsed 0

Penyelesaian

Anda perlu mengeksport medan id pengguna (jadikan ia bermula dengan huruf besar). Medan yang tidak dieksport tidak boleh dikodkan json.

type MyCustomClaims struct {
    UserID int `json:"userid"`
    jwt.RegisteredClaims
}

Atas ialah kandungan terperinci Tuntutan JWT tidak disimpan selepas tandatangan token. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam