Tuntutan JWT tidak disimpan selepas tandatangan token

王林
Lepaskan: 2024-02-14 09:40:09
ke hadapan
589 orang telah melayarinya

令牌签名后 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)

}

Salin selepas log masuk

Output

What was put 8
What was parsed 0
Salin selepas log masuk

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
}
Salin selepas log masuk

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

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!