• golang jwt验证


    package jwts

    import (
    "fmt"
    "github.com/dgrijalva/jwt-go"
    "github.com/kataras/iris/v12"
    "strings"
    "time"
    )



    // 生成token
    func (config *ClaimsConfigJson) TokenObtain() (string, error) {

    config.IssuedAt = time.Now().Unix()
    config.ExpiresAt = time.Now().Add(ExpireTime).Unix()

    token := jwt.NewWithClaims(jwt.SigningMethodHS256, config)
    signedToken, err := token.SignedString([]byte(SignKey))
    if err != nil {

    return "", err
    }
    return signedToken, nil
    }

    // =======================

    // 刷新token
    func (config *ClaimsConfigJson) tokenRefresh(ctx iris.Context) {
    jwtObj := ctx.GetHeader("Authorization")
    if jwtObj == "" {
    _, _ = ctx.JSON("未登录或已失效")
    return
    }
    StrToken := strings.Split(jwtObj, " ")[1]
    token, err := jwt.ParseWithClaims(StrToken, &ClaimsConfigJson{}, func(token *jwt.Token) (interface{}, error) {
    return []byte(SignKey), nil
    })
    if err != nil {
    println(err)
    return
    }
    claims, ok := token.Claims.(*ClaimsConfigJson)
    if !ok {
    println("test")
    return
    }
    if err := token.Claims.Valid(); err != nil {
    println(err)
    return
    }
    claims.UserId = config.UserId
    claims.ExpiresAt = time.Now().Unix() + (claims.ExpiresAt - claims.IssuedAt)

    newToken := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    signedToken, err := newToken.SignedString([]byte(SignKey))
    if err != nil {
    println(err)
    return
    }
    fmt.Println(signedToken)
    }

    // =====================

    // 路由中间件
    func JwtHandle(ctx iris.Context) {
    jwtObj := ctx.GetHeader("Authorization")
    if jwtObj == "" {
    _, _ = ctx.JSON("未登录或已失效")
    return
    }
    jwtStr := strings.Split(jwtObj, " ")[1]

    token, err := jwt.ParseWithClaims(jwtStr, &ClaimsConfigJson{}, func(token *jwt.Token) (interface{}, error) {
    return []byte(SignKey), nil
    })
    if err != nil {
    _, _ = ctx.JSON("令牌已过期")
    return
    }
    claims, ok := token.Claims.(*ClaimsConfigJson)
    if !ok {
    _, _ = ctx.JSON("解析用户数据错误")
    return
    }
    if err := token.Claims.Valid(); err != nil {
    _, _ = ctx.JSON("令牌已失效")
    return
    }
    ctx.Values().Set(DataKey, claims)
    ctx.Next()
    }
  • 相关阅读:
    C#String地址、拼接性能学习
    MySql触发器实现数据同步学习
    京东手机销售价格抓取
    判断是否是数字
    Ftp上传下载
    外部表不是预期的格式。
    C#获取带汉字的字符串长度
    C# Excel导入Access
    C# string.Format()格式
    规则“Microsoft Visual Studio 2008 的早期版本”失败。此计算机上安装了 Microsoft Visual Studio 2008 的早期版本。请在安装 SQL Server 2008 前将 Microsoft Visual Studio 2008 升级到 SP1。
  • 原文地址:https://www.cnblogs.com/yangxinpython/p/15071822.html
Copyright © 2020-2023  润新知