package utils import ( "errors" "github.com/golang-jwt/jwt/v5" ) // @secretKey: JWT 加解密密钥 // @iat: 时间戳 // @seconds: 过期时间,单位秒 // @payload: 数据载体 func GetJwtToken(secretKey string, iat, seconds int64, payload string) (string, error) { claims := make(jwt.MapClaims) claims["exp"] = iat + seconds claims["iat"] = iat claims["payload"] = payload token := jwt.New(jwt.SigningMethodHS256) token.Claims = claims return token.SignedString([]byte(secretKey)) } // @secretKey: JWT 加解密密钥 // @iat: 时间戳 // @seconds: 过期时间,单位秒 // @payload: 数据载体 func GetJwtTokenFromMap(secretKey string, iat, seconds int64, payload map[string]string) (string, error) { claims := make(jwt.MapClaims) claims["exp"] = iat + seconds claims["iat"] = iat for k, v := range payload { claims[k] = v } token := jwt.New(jwt.SigningMethodHS256) token.Claims = claims return token.SignedString([]byte(secretKey)) } // @secretKey: JWT 加解密密钥 // @token: JWT Token 的字符串 func ValidateJwtToken(secretKey, token string) (bool, error) { t, err := jwt.Parse(token, func(token *jwt.Token) (interface{}, error) { return []byte(secretKey), nil }) if err != nil { return false, err } return t.Valid, nil } func ParseToken(secretKey, tokenStr string) (u jwt.MapClaims, err error) { token, err := jwt.Parse(tokenStr, func(token *jwt.Token) (interface{}, error) { return []byte(secretKey), nil }) if err != nil { return nil, errors.New("couldn't handle this token") } if t, ok := token.Claims.(jwt.MapClaims); ok && token.Valid { return t, nil } return nil, errors.New("couldn't handle this token") }