JWT v4 简单使用实例

jwt包最新版本使用
github.com/golang-jwt/jwt

package main

import (
    "errors"
    "fmt"
    "time"

    "github.com/golang-jwt/jwt/v4"
)

type MyClaims struct {
    Username string `json:"username"`
    jwt.RegisteredClaims
}

const TokenExpireDuration = time.Second * 60

var MySecret = []byte("我是加密的key")

func main() {
    fmt.Println(time.Now())
    token, err := GenToken("weidada")
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(token)

    mc, err := ParseToken(token)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(mc)
}

// GenToken 生成JWT
func GenToken(username string) (string, error) {
    // 创建一个我们自己的声明
    c := MyClaims{
        username, // 自定义字段
        jwt.RegisteredClaims{
            ExpiresAt: jwt.NewNumericDate(time.Now().Add(TokenExpireDuration)),
            Issuer:    "weidada-api", // 签发人
        },
    }

    // 使用指定的签名方法创建签名对象
    token := jwt.NewWithClaims(jwt.SigningMethodHS256, c)
    // 使用指定的secret签名并获得完整的编码后的字符串token
    return token.SignedString(MySecret)
}

// ParseToken 解析JWT
func ParseToken(tokenString string) (*MyClaims, error) {
    // 解析token
    token, err := jwt.ParseWithClaims(tokenString, &MyClaims{}, func(token *jwt.Token) (i interface{}, err error) {
        return MySecret, nil
    })

    if err != nil {
        return nil, err
    }
    if claims, ok := token.Claims.(*MyClaims); ok && token.Valid { // 校验token
        return claims, nil
    }
    return nil, errors.New("invalid token")
}
sreio
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!