/*
* @,@Author: ,: lxcos
* @,@Date: ,: 2020-10-31 17:36:39
*/
package main
import (
"errors"
"fmt"
"github.com/dgrijalva/jwt-go"
log "github.com/sirupsen/logrus"
"time"
)
func init() {
customFormatter := new(log.TextFormatter)
customFormatter.TimestampFormat = "2006-01-02 15:04:05"
customFormatter.FullTimestamp = true
log.SetLevel(log.DebugLevel)
log.SetFormatter(customFormatter)
log.SetReportCaller(true)
log.Info("init logger success!")
}
// 自定义claims,添加一些内容
type csclaim struct {
Id uint32 `json:"id"`
Name string `json:"name"`
jwt.StandardClaims
}
func creToken() (string, error) {
// 标准模式
//signkey := []byte("AllYourBase") // Create the Claims
//claims := &jwt.StandardClaims{ExpiresAt: 15000, Issuer: "test"}
//at := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
//token, err := at.SignedString(signkey)
//return token, err
// 自定义模式
signkey := []byte("AllYourBase") // Create the Claims
claims := csclaim{1,
"chenfeng",
jwt.StandardClaims{
ExpiresAt: time.Now().Add(90*time.Second).Unix(), // 过期时间,必须设置
Issuer: "db.com", // 可不必设置,也可以填充用户名,
},
}
at := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
token, err := at.SignedString(signkey)
return token, err
}
func ParseToken(tokenString string, secret []byte) (jwt.MapClaims, error) {
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])
}
return secret, nil
})
if err != nil {
return nil, err
}
if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
return claims, nil
} else {
return nil, errors.New("token is unValid")
}
}
func main() {
cms, err := ParseToken("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwibmFtZSI6ImNoZW5mZW5nIiwiZXhwIjoxNjA1NTE0ODA2LCJpc3MiOiJkYi5jb20ifQ.lr7BK0caA9sW2jpfmXiA5e2yhCuBx93efW6j5J1APaY", []byte("AllYourBase"))
if err != nil {
if err.Error() == "Token is expired" {
log.Warning("token 过期,重新认证")
tk, _ := creToken()
log.Info(tk)
return
} else {
log.Error(err.Error())
return
}
}
log.Info(cms)
log.Info(cms["id"])
log.Info(cms["name"])
log.Info(cms["exp"].(float64))
}
网友评论