github.com/qxnw/lib4go@v0.0.0-20180426074627-c80c7e84b925/security/jwt/jwt.go (about) 1 package jwt 2 3 import ( 4 "fmt" 5 "time" 6 7 "github.com/zkfy/jwt-go" 8 ) 9 10 //Encrypt 加密生成jwt字符串 11 func Encrypt(secret string, alg string, data interface{}, timeout int64) (string, error) { 12 expireAt := time.Now().Unix() + timeout 13 if timeout == 0 { 14 expireAt = 0 15 } 16 claims := &jwt.MapClaims{ 17 "exp": expireAt, 18 "data": data, 19 } 20 method := jwt.GetSigningMethod(alg) 21 token := jwt.NewWithClaims(method, claims) 22 ss, err := token.SignedString([]byte(secret)) 23 return ss, err 24 } 25 26 //Decrypt JWT解密 27 func Decrypt(data string, secret string) (interface{}, error) { 28 token, err := jwt.Parse(data, func(token *jwt.Token) (interface{}, error) { 29 return []byte(secret), nil 30 }) 31 if err != nil { 32 return nil, err 33 } 34 if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid { 35 return claims["data"], nil 36 } 37 return nil, fmt.Errorf("输入参数签名错误") 38 }