Maison >développement back-end >Golang >Les revendications JWT ne sont pas conservées après la signature du jeton

Les revendications JWT ne sont pas conservées après la signature du jeton

王林
王林avant
2024-02-14 09:40:09659parcourir

令牌签名后 JWT 声明不保留

l'éditeur php Banana présentera un concept important dans JWT (JSON Web Token) dans cet article : la signature du token. JWT est une norme de sécurité permettant de transmettre des informations entre des applications Web. Dans JWT, la signature de jeton est un mécanisme permettant de protéger l'intégrité et l'authenticité du jeton. Une fois le token signé, toute falsification ou falsification du token sera immédiatement détectée. Cependant, il se peut que nous devions parfois ne pas conserver la signature de la réclamation JWT dans certaines situations, et cet article expliquera en détail comment répondre à cette exigence.

Contenu de la question

J'ai le code suivant. J'utilise des revendications personnalisées pour créer un jeton Web json (en utilisant golang-jwt). Le problème est que lorsque je signe le jeton à l'aide de la clé (méthode = hs256) et que j'analyse ensuite le jeton, les revendications changent. Quelle erreur ai-je commise.

Code :

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)

}

Sortie

What was put 8
What was parsed 0

Solution de contournement

Vous devez exporter le champ d'identification de l'utilisateur (le faire commencer par une lettre majuscule). Les champs non exportés ne peuvent pas être codés en JSON.

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer