关于go语言中的JWT(JSON WEB TONKE)ECHO

jwt用作验证用户登录,很好的解决了session单点的问题



//验证
//在调用Parse时,会进行加密验证,同时如果提供了exp,会进行过期验证;
//如果提供了iat,会进行发行时间验证;如果提供了nbf,会进行发行时间验证.

//创建 tokenString
func createJwt() (string, error) {
    //  token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
    //      "foo": "bar",
    //      "nbf": time.Date(2015, 10, 10, 12, 0, 0, 0, time.UTC).Unix(),

    //  })

    token := jwt.New(jwt.SigningMethodHS256)
    claims := make(jwt.MapClaims)
    claims["foo"] = "bar"
    claims["exp"] = time.Now().Add(time.Hour * time.Duration(1)).Unix()
    claims["iat"] = time.Now().Unix()
    token.Claims = claims

    // Sign and get the complete encoded token as a string using the secret
    tokenString, err := token.SignedString([]byte(TOKEN))
    return tokenString, err
}

//解析tokenString
func parseJwt(tokenString string) jwt.MapClaims {
    token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
        // Don't forget to validate the alg is what you expect:
        if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
            return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])
        }

        // hmacSampleSecret is a []byte containing your secret, e.g. []byte("my_secret_key")
        return []byte(TOKEN), nil
    })

    var claims jwt.MapClaims
    var ok bool

    if claims, ok = token.Claims.(jwt.MapClaims); ok && token.Valid {
        fmt.Println(claims["foo"], claims["nbf"])
    } else {
        fmt.Println(err)
    }

    return claims
}






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值