go代码实现jwt


import  "github.com/dgrijalva/jwt-go"
var Secret string = "crypto"

注意如下 claims["iat"] 赋值不要用token.Claims["iat"]会报错(type jwt.Claims does not support indexing)

func (c Reg) Sign(uuid string, secret string) string {//生成token,算法hs256

    token := jwt.New(jwt.SigningMethodHS256)
    claims := make(jwt.MapClaims)
    claims["iat"] = time.Now().Unix()
    claims["id"] = uuid
    claims["secret"] = secret //需私钥加密
    token.Claims = claims
    s, err := token.SignedString([]byte(secret))
    if err != nil {
        panic(err)
    }
    return s
}


func (c Reg) getValidationKey(*jwt.Token) (interface{}, error) {
     return []byte(Secret), nil
}

//验证解析token

func (c Reg) VerifyToken(deviceuuid string, input string, secret string) (jwt.Claims, string) {
    token, err := jwt.Parse(input, c.getValidationKey)
    if err != nil {
        return nil, err.Error()
    }
    if jwt.SigningMethodHS256.Alg() != token.Header["alg"] {
        return nil, "header err!"
    }
    if claims,ok := token.Claims.(jwt.MapClaims); ok && token.Valid {//取出token中的数据
        if claims["id"] != deviceuuid {
            return nil, "token claims err"
        }
    }
    fmt.Printf("verify pass!!!")
    return token.Claims, ""
} 


func main () {
    token_new := c.Sign(deviceuuid, Secret)
    VerifyToken(deviceuuid, token_new, Secret)
}





  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值