jwt-go

2020-11-16  本文已影响0人  Hmcf
/*
 * @,@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))
}


上一篇 下一篇

猜你喜欢

热点阅读