/*
* @,@Author: ,: lxcos
* @,@Date: ,: 2020-10-31 17:36:39
*/
package main
import (
"errors"
"fmt"
"github.com/dgrijalva/jwt-go"
log "github.com/sirupsen/logrus"
"time"
)
func init() {
customFormatter := new(log.TextFormatter)
customFormatter.TimestampFormat = "2006-01-02 15:04:05"
customFormatter.FullTimestamp = true
log.SetLevel(log.DebugLevel)
log.SetFormatter(customFormatter)
log.SetReportCaller(true)
log.Info("init logger success!")
}
// 自定義claims丰泊,添加一些內(nèi)容
type csclaim struct {
Id uint32 `json:"id"`
Name string `json:"name"`
jwt.StandardClaims
}
func creToken() (string, error) {
// 標(biāo)準(zhǔn)模式
//signkey := []byte("AllYourBase") // Create the Claims
//claims := &jwt.StandardClaims{ExpiresAt: 15000, Issuer: "test"}
//at := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
//token, err := at.SignedString(signkey)
//return token, err
// 自定義模式
signkey := []byte("AllYourBase") // Create the Claims
claims := csclaim{1,
"chenfeng",
jwt.StandardClaims{
ExpiresAt: time.Now().Add(90*time.Second).Unix(), // 過期時(shí)間,必須設(shè)置
Issuer: "db.com", // 可不必設(shè)置县习,也可以填充用戶名特愿,
},
}
at := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
token, err := at.SignedString(signkey)
return token, err
}
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 err != nil {
return nil, err
}
if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
return claims, nil
} else {
return nil, errors.New("token is unValid")
}
}
func main() {
cms, err := ParseToken("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwibmFtZSI6ImNoZW5mZW5nIiwiZXhwIjoxNjA1NTE0ODA2LCJpc3MiOiJkYi5jb20ifQ.lr7BK0caA9sW2jpfmXiA5e2yhCuBx93efW6j5J1APaY", []byte("AllYourBase"))
if err != nil {
if err.Error() == "Token is expired" {
log.Warning("token 過期蟆盐,重新認(rèn)證")
tk, _ := creToken()
log.Info(tk)
return
} else {
log.Error(err.Error())
return
}
}
log.Info(cms)
log.Info(cms["id"])
log.Info(cms["name"])
log.Info(cms["exp"].(float64))
}
jwt-go
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門癣诱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人袜香,你說我怎么就攤上這事撕予。” “怎么了困鸥?”我有些...
- 文/不壞的土叔 我叫張陵嗅蔬,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我疾就,道長(zhǎng)澜术,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任猬腰,我火速辦了婚禮鸟废,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘姑荷。我一直安慰自己盒延,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布鼠冕。 她就那樣靜靜地躺著添寺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪懈费。 梳的紋絲不亂的頭發(fā)上计露,一...
- 文/蒼蘭香墨 我猛地睜開眼阵谚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蚕礼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起梢什,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤闻牡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后绳矩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體罩润,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年翼馆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了割以。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片金度。...
- 正文 年R本政府宣布跟伏,位于F島的核電站,受9級(jí)特大地震影響翩瓜,放射性物質(zhì)發(fā)生泄漏受扳。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一兔跌、第九天 我趴在偏房一處隱蔽的房頂上張望勘高。 院中可真熱鬧,春花似錦坟桅、人聲如沸华望。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)赖舟。三九已至,卻和暖如春夸楣,著一層夾襖步出監(jiān)牢的瞬間宾抓,已是汗流浹背。 一陣腳步聲響...
- 正文 我出身青樓嘿棘,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親旭绒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鸟妙,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 本文只說明如何從HTTP請(qǐng)求中解析tokentoken驗(yàn)證是一種web常用的身份驗(yàn)證手段,在這里不討論它的具體實(shí)現(xiàn)...
- github.com/dgrijalva/jwt-go 構(gòu)建token 解析token 第一種 構(gòu)建token ...
- 閱讀本文前你需要閱讀 金光燦燦的Gorm V2+適合創(chuàng)業(yè)的golang微服務(wù)框架go-zero實(shí)戰(zhàn) 創(chuàng)建項(xiàng)目 生成...
- 關(guān)于JWT是什么挥吵,大家可以看看官網(wǎng)[https://jwt.io/]重父,一句話介紹下:是可以實(shí)現(xiàn)服務(wù)器無(wú)狀態(tài)的鑒權(quán)認(rèn)...