Maison > développement back-end > Golang > le corps du texte

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

王林
Libérer: 2024-02-14 09:40:09
avant
554 Les gens l'ont consulté

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

}

Copier après la connexion

Sortie

What was put 8
What was parsed 0
Copier après la connexion

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
}
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!