golang jwt加密

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加密)