golang jwt加密

JWT(json web token)的授權(quán)方式

jwt是JSON風(fēng)格輕量級(jí)的授權(quán)和身份認(rèn)證規(guī)范,可實(shí)現(xiàn)無狀態(tài)、分布式的Web應(yīng)用授權(quán);
1.客戶端獲取token
2.客戶端使用token,客戶端對(duì)token進(jìn)行驗(yàn)證

JWT的構(gòu)成
第一部分我們稱它為頭部(header),第二部分我們稱其為載荷(payload, 類似于飛機(jī)上承載的物品),第三部分是簽證(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))

    //創(chuàng)建req驗(yàn)證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)
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容