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()
    }
  • 相关阅读:
    Javascript
    Linux折腾
    arch linux 教程
    fedora 安装 网易云音乐
    angularJS
    vim以超级用户权限保存文件
    Laravel 安装
    nginx
    xargs 简单功能
    yum 安装 php5.6 和 mysql5.6
  • 原文地址:https://www.cnblogs.com/yangxinpython/p/15071822.html
Copyright © 2011-2022 走看看