JWT简单使用
首先先安装JWT,我用的版本是V5
go get -u github.com/golang-jwt/jwt/v5
导入JWT包
import "github.com/golang-jwt/jwt/v5"
创捷结构体
type MyClaims struct {
Username string `json:"username"`
jwt.RegisteredClaims
}
1.创建JWT
func main() {
// MapClaims map
mySigningkey := []byte("woshiyigedashuaige")
//StandardClaims
c := MyClaims{
Username: "krien",
RegisteredClaims: jwt.RegisteredClaims{
// nbf: 定义在什么时间之前,该jwt都是不可用的
NotBefore: jwt.NewNumericDate(time.Now()),
// ExpiresAt:jwt的过期时间,这个过期时间必须要大于签发时间
ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Hour)),
// jwt签发者
Issuer: "krien",
},
}
// NewWithClaims使用指定的签名方法和声明创建一个新的令牌。类似加密
t := jwt.NewWithClaims(jwt.SigningMethodHS256, c)
s, e := t.SignedString(mySigningkey)
if e != nil {
fmt.Printf("%s", e)
}
// fmt.Println(s)
执行返回 token
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImtyaWVuIiwiaXNzIjoia3JpZW4iLCJleHAiOjE2ODE4MTYwMTgsIm5iZiI6MTY4MTgxMjQxOH0.AhsRuYBgDohWbDelJAe82CkslVjA_vVxBeyK3psOl74
2.解析JWT
func:特殊的回调函数,需要固定接收 * Token 类型指针,返回 interface{} 和 err,interface{} 就是我们的密钥 mySigningkey
token, err := jwt.ParseWithClaims(s, &MyClaims{}, func(token *jwt.Token) (interface{}, error) {
// 需要return你的密钥
return mySigningkey, nil
})
if err != nil {
fmt.Printf("%s", err)
return
}
fmt.Println(token.Claims.(*MyClaims).Username)
[Running] go run "c:\Users\79120\Desktop\GoPro\mypro\test1085.go"
krien
[Done] exited with code=0 in 6.806 seconds