golang jwt加密

作者: 高小震 | 来源:发表于2017-12-28 15:29 被阅读283次

    JWT(json web token)的授权方式

    jwt是JSON风格轻量级的授权和身份认证规范,可实现无状态、分布式的Web应用授权;
    1.客户端获取token
    2.客户端使用token,客户端对token进行验证

    JWT的构成
    第一部分我们称它为头部(header),第二部分我们称其为载荷(payload, 类似于飞机上承载的物品),第三部分是签证(signature).

    golang代码:
    使用jwt第三方包: https://github.com/dgrijalva/jwt-go

    package main
    
    import (
        "github.com/dgrijalva/jwt-go"
        "time"
        "fmt"
        "net/http"
        "github.com/dgrijalva/jwt-go/request"
    )
    
    const (
        k = "1885df74d00dbbe19274c6d955feeb5b"
    )
    
    func main() {
        //生成token
        //提供三种加密方式SigningMethodHS256(sha256)SigningMethodHS384,SigningMethodHS512
        token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.StandardClaims{
            ExpiresAt: time.Now().AddDate(0, 0, 1).Unix(),
            Id:        "1",
        })
        fmt.Println(token)
        t, _ := token.SignedString([]byte(k))
    
        //创建req验证token
        req, _ := http.NewRequest("GET", "test", nil)
        req.Header.Add("token", t)
        fmt.Println(req.Header)
        token2, err := request.ParseFromRequest(req, request.HeaderExtractor{"token"}, func(token *jwt.Token) (interface{}, error) {
            return []byte(k), nil
        })
    
        if err != nil {
            fmt.Println(err.Error())
            panic(err)
        }
        sc := token2.Claims.(jwt.MapClaims)
        fmt.Println(sc)
    }
    
    

    相关文章

      网友评论

        本文标题:golang jwt加密

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