@
目录写在前面
install jwt
go get github.com/golang-jwt/jwt/v5
golang jwt
import (
"errors"
"github.com/golang-jwt/jwt/v5"
"time"
)
var (
secretKey = "secret"
expireAt = time.Duration * 10
)
// Claims 创建自定义声明结构体
type Claims struct {
name string // 自定义
jwt.RegisteredClaims
}
func Token(auth model.Auth) (string, error) {
var expireAt time.Duration
// 定义一个密钥(在生产环境中,请使用更安全的密钥管理方案)
// 创建声明
claims := Claims{
Auth: auth,
RegisteredClaims: jwt.RegisteredClaims{
ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Hour * expireAt)), // expireAt 小时后过期
IssuedAt: jwt.NewNumericDate(time.Now()),
NotBefore: jwt.NewNumericDate(time.Now()),
},
}
// 创建token
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
// 签名token
return token.SignedString([]byte(SecretKey))
}
func Parse(tokenString string) (*Claims, error) {
// 解析和校验token
token, err := jwt.ParseWithClaims(tokenString, &Claims{}, func(token *jwt.Token) (interface{}, error) {
return []byte(SecretKey), nil
})
if err != nil {
return nil, err
}
if claims, ok := token.Claims.(*Claims); ok && token.Valid {
return claims, nil
}
return nil, errors.New("jwt parser error")
}
参考资料
基础/标准库/第三方库
golang 导航
编程规范
算法|面试
项目
标签:jwt,golang,token,time,go,Claims From: https://www.cnblogs.com/nones/p/18220149