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)
}





你可能感兴趣的:(go,go,jwt)