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.
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
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!