jwt-go

作者: 王哈哈就很棒 | 来源:发表于2020-07-27 16:23 被阅读0次

关于JWT参考 http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html

package main

import (
    "fmt"
    "github.com/develop1024/jwt-go"
    "time"
)

// 生成token
func GenerateToken(secret []byte, claims jwt.MapClaims) (tokenString string, err error) {
    // 创建一个新的令牌对象,指定签名方法和声明
    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)

    // 使用密码签名并获得完整的编码令牌作为字符串
    tokenString, err = token.SignedString(secret)
    return
}

// 解析token
func ParseToken(tokenString string, secret []byte) (jwt.MapClaims, error) {
    token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
        if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
            return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])
        }
        return secret, nil
    })

    if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
        return claims, nil
    } else {
        return nil, err
    }
}

func main() {
    // payload 存放实际需要传递的数据
    data := jwt.MapClaims{
        "iss": "wang",
        "exp": time.Now().Add(time.Second * 1).Unix(),
        "foo": "bar",
    }

    // 生成token
    token, err := GenerateToken([]byte("abc"), data)
    if err != nil {
        panic(err)
    }
    fmt.Println("token: ", token)

    // 解析token
    claims, err := ParseToken(token, []byte("abc"))
    if err != nil {
        fmt.Println(err)
    } else {
        // 解析token拿到里面的数据
        fmt.Println(claims["exp"])
        fmt.Println(claims["foo"])
    }
}


输出

token:  eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTU4MzgzNzYsImZvbyI6ImJhciIsImlzcyI6IndhbmcifQ.O7hjWoQK3gL3aKbDSGGsmvtqnsowjphjiJ4_Gzl1L9c
1.595838376e+09
bar

主要

// 生成token
func GenerateToken(secret []byte, claims jwt.MapClaims) (tokenString string, err error) {
    // 创建一个新的令牌对象,指定签名方法和声明
    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)

    // 使用密码签名并获得完整的编码令牌作为字符串
    tokenString, err = token.SignedString(secret)
    return
}

// 解析token
func ParseToken(tokenString string, secret []byte) (jwt.MapClaims, error) {
    token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
        if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
            return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])
        }
        return secret, nil
    })

    if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
        return claims, nil
    } else {
        return nil, err
    }
}

封装后

package main

import (
    "fmt"
    "github.com/develop1024/gojwt"
    "time"
)

func main() {
    // 生成token
    secret := []byte("hello secret")
    token, err := gojwt.GenerateToken(secret, map[string]interface{}{
        "iss": "wang",
        "exp": time.Now().Add(time.Second * 1).Unix(),
        "foo": "bar",
    })

    if err != nil {
        panic(err)
    }

    fmt.Println("token: ", token)

    // 解析token
    claims, err := gojwt.ParseToken(token, secret)
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(claims)
        fmt.Println(claims["exp"])
        fmt.Println(claims["iss"])
    }
}

相关文章

  • jwt-go

    关于JWT参考 http://www.ruanyifeng.com/blog/2018/07/json_web_t...

  • jwt-go

  • go中jwt使用

    1.引入包"github.com/dgrijalva/jwt-go" 2.设置token并返回 func setT...

  • 17 Go 鉴权(三):JWT

    Go 使用JWT鉴权 一、实现思路: 实现一个基于jwt-go包的JWT编解码工具 实现一个HTTP服务器编写登录...

  • Golang jwt-go 实现token验证身份

    本文只说明如何从HTTP请求中解析tokentoken验证是一种web常用的身份验证手段,在这里不讨论它的具体实现...

网友评论

      本文标题:jwt-go

      本文链接:https://www.haomeiwen.com/subject/dunzlktx.html