Heim >Backend-Entwicklung >Golang >JWT-Ansprüche bleiben nach der Tokensignierung nicht erhalten

JWT-Ansprüche bleiben nach der Tokensignierung nicht erhalten

王林
王林nach vorne
2024-02-14 09:40:09653Durchsuche

令牌签名后 JWT 声明不保留

php-Editor Banana stellt in diesem Artikel ein wichtiges Konzept in JWT (JSON Web Token) vor: Token-Signatur. JWT ist ein Sicherheitsstandard für die Weitergabe von Informationen zwischen Webanwendungen. In JWT ist die Tokensignierung ein Mechanismus zum Schutz der Integrität und Authentizität des Tokens. Sobald der Token signiert ist, wird jede Manipulation oder Fälschung des Tokens sofort erkannt. In bestimmten Situationen kann es jedoch vorkommen, dass wir die Signatur des JWT-Anspruchs nicht aufbewahren müssen. In diesem Artikel wird ausführlich erläutert, wie diese Anforderung erfüllt werden kann.

Frageninhalt

Ich habe den folgenden Code. Ich verwende benutzerdefinierte Ansprüche, um ein JSON-Web-Token zu erstellen (mithilfe von golang-jwt). Das Problem ist, dass sich die Ansprüche ändern, wenn ich das Token mit dem Schlüssel signiere (Methode = hs256) und dann das Token analysiere. Welchen Fehler habe ich gemacht.

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)

}

Ausgabe

What was put 8
What was parsed 0

Workaround

Sie müssen das Benutzer-ID-Feld exportieren (lassen Sie es mit einem Großbuchstaben beginnen). Nicht exportierte Felder können nicht JSON-codiert werden.

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

Das obige ist der detaillierte Inhalt vonJWT-Ansprüche bleiben nach der Tokensignierung nicht erhalten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen