自然第一步是暗转
jwt-go
的依赖啦
#go get github.com/golang-jwt/jwt/v5
go get github.com/dgrijalva/jwt-go
main()
函数中写入package main
import (
"github.com/dgrijalva/jwt-go"
)
func main() {
//jwt.NewWithClaims(Claims)
jwt.NewWithClaims()
}
Claims基础结构
package main
import (
"github.com/dgrijalva/jwt-go"
)
type MyClaims struct {
jwt.StandardClaims
}
func main() {
//jwt.NewWithClaims(Claims)
jwt.NewWithClaims()
}
package main
import (
"github.com/dgrijalva/jwt-go"
)
type MyClaims struct {
UserName string `json:"username"`
jwt.StandardClaims
}
func main() {
//jwt.NewWithClaims(加密方式,Claims)
jwt.NewWithClaims(jwt.SigningMethodHS256,MyClaims) //当然这里不能是结构体(MyClaims)而是结构体实例
}
type StandardClaims struct {
Audience string `json:"aud,omitempty"` //
ExpiresAt int64 `json:"exp,omitempty"` //过期时间
Id string `json:"jti,omitempty"` //
IssuedAt int64 `json:"iat,omitempty"` //
Issuer string `json:"iss,omitempty"` //签发人
NotBefore int64 `json:"nbf,omitempty"` //什么时间开始生效
Subject string `json:"sub,omitempty"` //
}
package main
import (
"fmt"
"github.com/dgrijalva/jwt-go"
"time"
)
type MyClaims struct {
UserName string `json:"username"`
jwt.StandardClaims
}
func main() {
c := MyClaims{
UserName: "AllYourBase",
StandardClaims: jwt.StandardClaims{
NotBefore: time.Now().Unix() - 60, //当前时间的一分钟之前生效
ExpiresAt: time.Now().Unix() + 60*60*2, //当前时间的俩小时
Issuer: "AllYourBase", //用户名
},
}
//jwt.NewWithClaims(加密方式,Claims)
token := jwt.NewWithClaims(jwt.SigningMethodHS256, c)
fmt.Println(token)
}
这样我们的token就基本完成了,打印输出
&{ 0xc000008090 map[alg:HS256 typ:JWT] {chen { 1703288998 0 chen 1703296138 }} false}
map[alg:HS256 typ:JWT]
:头
{chen { 1703288998 0 chen 1703296138 }}
:体
0xc000008090
:加密串
我们要丢给前端使用肯定不行,所以要加密
加密部分(token
来自于前面的代码)
mySigningKey := []byte("AllYourBase")
//token.SignedString(key) //key:官方让我们放一个byte
s, err := token.SignedString(mySigningKey)
if err != nil {
fmt.Printf("%s", err)
}
fmt.Println(s)
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImNoZW4iLCJleHAiOjE3MDMyODk0MzUsImlzcyI6ImNoZW4iLCJuYmYiOjE3MDMyOTY1NzV9.ZeMpAIzPyRoIQSjDctIuQEHxzYRaKQ9McqBfoq3SzCI
生成的这个加密就可以丢给前端去使用了
如果前端吧串丢回来了怎么解密?
jwt.ParseWithClaims(token,解析的模板,func(token *jwt.Token)(interface{
},error){
})
写法
jwt.ParseWithClaims(s,&MyClaims,func