go使用JWT

采用对称加密,校验用户的工具

代码实现demo

package main

import (
	_ "crypto/sha256"
	"fmt"
	"github.com/go-pay/gopay/pkg/jwt"
	"time"
)

var secretKey string = "123abcbajhdjhsjkdhjgshghank"

func CreateToken(secretKey string, datas map[string]interface{
    
    }, expires int) string {
    
    
	if expires == 0 {
    
    
		expires = 1
	}
	token := jwt.New(jwt.SigningMethodHS256)
	claims := make(jwt.MapClaims)
	for k, v := range datas {
    
    
		claims[k] = v
	}
	claims["exp"] = time.Now().Add(time.Hour * time.Duration(expires) * 24).Unix()
	claims["iat"] = time.Now().Unix()
	token.Claims = claims
	tokenString, err := token.SignedString([]byte(secretKey))
	if err != nil {
    
    
		fmt.Println(err)
		panic("Token creation error")
	}
	return tokenString
}

func GetTokenData(tokenString string) (map[string]interface{
    
    }, 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 []byte(secretKey), nil
	})
	if err != nil {
    
    
		return nil, err
	}
	tokenData := token.Claims.(jwt.MapClaims)
	if int64(tokenData["exp"].(float64)) < time.Now().Unix() {
    
    
		return nil, fmt.Errorf("Token expired")
	}
	return tokenData, nil
}

func main() {
    
    
	tokenStr := CreateToken(secretKey, map[string]interface{
    
    }{
    
    
		"uid": 308857,
		"pwd": "123456",
	}, 3)
	fmt.Println(tokenStr)
	data, _ := GetTokenData(tokenStr)
	fmt.Println(data["uid"], data["pwd"])
}

おすすめ

転載: blog.csdn.net/qq_37575994/article/details/127387004