
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 声明不保留的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号