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  }