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

JWT-Ansprüche bleiben nach der Tokensignierung nicht erhalten

王林
Freigeben: 2024-02-14 09:40:09
nach vorne
652 Leute haben es durchsucht

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

}

Nach dem Login kopieren

Ausgabe

What was put 8
What was parsed 0
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage