package utils import ( "applet/app/lib/auth" "errors" "time" "github.com/dgrijalva/jwt-go" ) // GenToken 生成JWT func GenToken(masterId string) (aToken, rToken string, err error) { // 创建一个我们自己的声明 c := auth.JWTMaster{ masterId, jwt.StandardClaims{ ExpiresAt: time.Now().Add(auth.TokenExpireDuration).Unix(), // 过期时间 Issuer: "zyos_zhimeng", // 签发人 }, } // 使用指定的签名方法创建签名对象 token := jwt.NewWithClaims(jwt.SigningMethodHS256, c) // 使用指定的secret签名并获得完整的编码后的字符串token aToken, err = token.SignedString(auth.Secret) if err != nil { return "", "", err } // rToken 生成 rc := auth.JWTMaster{ masterId, jwt.StandardClaims{ ExpiresAt: time.Now().Add(auth.RefreshTokenExpireDuration).Unix(), // 过期时间 Issuer: "zyos_zhimeng", // 签发人 }, } rToken, err = jwt.NewWithClaims(jwt.SigningMethodHS256, rc).SignedString(auth.RSecret) return } // ParseToken 解析JWT func ParseToken(tokenString string) (*auth.JWTMaster, error) { // 解析token token, err := jwt.ParseWithClaims(tokenString, &auth.JWTMaster{}, func(token *jwt.Token) (i interface{}, err error) { return auth.Secret, nil }) if err != nil { return nil, err } if claims, ok := token.Claims.(*auth.JWTMaster); ok && token.Valid { // 校验token return claims, nil } return nil, errors.New("invalid token") } // ParseRToken 解析JWT func ParseRToken(tokenString string) (*auth.JWTMaster, error) { // 解析token token, err := jwt.ParseWithClaims(tokenString, &auth.JWTMaster{}, func(token *jwt.Token) (i interface{}, err error) { return auth.RSecret, nil }) if err != nil { return nil, err } if claims, ok := token.Claims.(*auth.JWTMaster); ok && token.Valid { // 校验token return claims, nil } return nil, errors.New("invalid token") }