令牌签名后 JWT 声明不保留

2024年 2月 14日 72.0k 0

令牌签名后 jwt 声明不保留

php小编香蕉在本文中将介绍JWT(JSON Web Token)中的一个重要概念:令牌签名。JWT是一种用于在网络应用之间传递信息的安全标准。在JWT中,令牌签名是一种保护令牌完整性和真实性的机制。一旦令牌被签名,任何对令牌的篡改或伪造都将被立即检测到。然而,有时候我们可能需要在某些情况下不保留JWT声明的签名,本文将详细解释如何实现这一需求。

问题内容

我有以下代码。我正在使用自定义声明创建一个 json web 令牌(使用 golang-jwt)。问题是,当我使用密钥(方法 = hs256)签署令牌然后解析令牌时,声明会发生更改。我犯了什么错误。

代码:

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)

}

登录后复制

输出

What was put 8
What was parsed 0

登录后复制

解决方法

您必须导出用户 id 字段(使其以大写字母开头)。未导出的字段无法进行 json 编码。

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

登录后复制

以上就是令牌签名后 JWT 声明不保留的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论