【go】【jwt】

@


写在前面

  • 相关博文
  • 个人博客首页
  • 免责声明:仅供学习交流使用!开源框架可能存在的风险和相关后果将完全由用户自行承担,本人不承担任何法律责任。

install jwt

go get github.com/golang-jwt/jwt/v5

golang jwt


import (
	"errors"
	"github.com/golang-jwt/jwt/v5"
	"time"
)
var (
	secretKey = "secret"
	expireAt = time.Duration * 10
	)

// Claims 创建自定义声明结构体
type Claims struct {
	name string // 自定义
	jwt.RegisteredClaims
}

func Token(auth model.Auth) (string, error) {
	var expireAt time.Duration
	// 定义一个密钥(在生产环境中,请使用更安全的密钥管理方案)
	// 创建声明
	claims := Claims{
		Auth: auth,
		RegisteredClaims: jwt.RegisteredClaims{
			ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Hour * expireAt)), // expireAt 小时后过期
			IssuedAt:  jwt.NewNumericDate(time.Now()),
			NotBefore: jwt.NewNumericDate(time.Now()),
		},
	}

	// 创建token
	token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)

	// 签名token
	return token.SignedString([]byte(SecretKey))
}

func Parse(tokenString string) (*Claims, error) {

	// 解析和校验token
	token, err := jwt.ParseWithClaims(tokenString, &Claims{}, func(token *jwt.Token) (interface{}, error) {
		return []byte(SecretKey), nil
	})
	if err != nil {
		return nil, err
	}
	if claims, ok := token.Claims.(*Claims); ok && token.Valid {
		return claims, nil
	}
	return nil, errors.New("jwt parser error")
}


参考资料

基础/标准库/第三方库


golang 导航


编程规范


算法|面试


项目


posted @ 2024-05-29 14:04  Nones  阅读(5)  评论(0编辑  收藏  举报