jwt-go

作者: Hmcf | 来源:发表于2020-11-16 16:22 被阅读0次
/*
 * @,@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))
}


相关文章

  • jwt-go

    关于JWT参考 http://www.ruanyifeng.com/blog/2018/07/json_web_t...

  • jwt-go

  • go中jwt使用

    1.引入包"github.com/dgrijalva/jwt-go" 2.设置token并返回 func setT...

  • 17 Go 鉴权(三):JWT

    Go 使用JWT鉴权 一、实现思路: 实现一个基于jwt-go包的JWT编解码工具 实现一个HTTP服务器编写登录...

  • Golang jwt-go 实现token验证身份

    本文只说明如何从HTTP请求中解析tokentoken验证是一种web常用的身份验证手段,在这里不讨论它的具体实现...

网友评论

      本文标题:jwt-go

      本文链接:https://www.haomeiwen.com/subject/aexwbktx.html