jwt

jwt-go

package jwtgo

import (
	"fmt"
	"github.com/dgrijalva/jwt-go"
	"time"
)

const (
	// secretKey 加密key
	secretKey = "Q6jhLn8vsD04WmAR"
)

// expTime token有效时间
var expTime = time.Now().Add(time.Hour * 2).Unix()

// JwtClaims 自定义 Claims 结构体
type JwtClaims struct {
	// 按需求自定义下方参数
	Id   string
	Name string
	Role string
	jwt.StandardClaims
}

// GenerateToken
// 利用JwtClaims生成token字符串
// 加密方式; SHA256
func GenerateToken(id, name, role string) (tokenStr string, err error) {

	jwtClaims := &JwtClaims{
		Id:   id, //用户id
		Name: name,
		Role: role,
		StandardClaims: jwt.StandardClaims{
			ExpiresAt: expTime,
			//Issuer:    issuer, //发行人
		},
	}

	token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwtClaims)
	tokenStr, err = token.SignedString([]byte(secretKey))
	return
}

//ParseToken 解析token
func ParseToken(tokenString string) (*JwtClaims, error) {
	token, err := jwt.ParseWithClaims(tokenString, &JwtClaims{}, 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 []byte(secretKey), nil
	})

	if claims, ok := token.Claims.(*JwtClaims); ok && token.Valid {
		return claims, nil
	} else {
		return nil, err
	}
}

使用

package main

import (
	"fmt"
	"gotoys/plugins/jwtgo"
	"log"
)

func main() {

	// 生成token
	token, err := jwtgo.GenerateToken(
		"cc6a6e14-2f11-4b61-b077-1b0f7b9c7944",
		"xiao ming",
		"administrator")

	if err != nil {
		log.Printf("%v", err)
	} else {
		fmt.Printf("token:%s\n", token)
	}

	// 解析token
	jwtClaims, err := jwtgo.ParseToken(token)
	if err != nil {
		log.Printf("%v", err)
	} else {
		fmt.Printf("id:%s\nname:%s\nrole:%s\nexp:%d", jwtClaims.Id, jwtClaims.Name, jwtClaims.Role, jwtClaims.ExpiresAt)
	}

}

打印结果

token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJJZCI6ImNjNmE2ZTE0LTJmMTEtNGI2MS1iMDc3LTFiMGY3YjljNzk0NCIsIk5hbWUiOiJ4aWFvIG1pbmciLCJSb2xlIjoiYWRtaW5pc3RyYXRvciIsImV4cCI6MTYwODk5Nzk5NH0.RuPNtNzoUQiaRb2qQYgfR2FBoi4rpox3kzMdO_WgUt0
id:cc6a6e14-2f11-4b61-b077-1b0f7b9c7944
name:xiao ming
role:administrator
exp:1608997994