zoukankan      html  css  js  c++  java
  • 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()
    }
  • 相关阅读:
    Scrapy数据持久化
    Mybatis源码与Spring源码中设计模式的应用总结
    Count-Min Sketch 算法
    加解密算法、消息摘要、消息认证技术、数字签名与公钥证书
    智能卡系统设计(一) 断电保护和数据备份
    TCP/IP协议——ARP详解
    DES算法详解
    Python调用外部程序——os.system()和subprocess.call()
    Python实现截图
    Linux笔记:SSH客户端断开配置
  • 原文地址:https://www.cnblogs.com/yangxinpython/p/15071822.html
Copyright © 2011-2022 走看看