采用对称加密,校验用户的工具
代码实现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"])
}