Golang token的生成和解析詳解
更新時(shí)間:2024年02月11日 10:18:58 作者:gogogo不想敲代碼
這篇文章主要給大家介紹了Golang token的生成和解析,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
Golang token的生成和解析
使用第三方庫(kù)來(lái)實(shí)現(xiàn)
go get github.com/dgrijalva/jwt-go
golang代碼
package main import ( "fmt" "time" "github.com/dgrijalva/jwt-go" ) func main() { // 生成Token tokenString := generateToken("example-user", "secret-key") fmt.Println("Token:", tokenString) // 解密Token claims, err := parseToken(tokenString, "secret-key") if err != nil { fmt.Println("解密Token失敗:", err) return } // 獲取Token中的自定義聲明 if username, ok := claims["username"].(string); ok { fmt.Println("Username:", username) } } func generateToken(username string, secretKey string) string { // 創(chuàng)建一個(gè)Token對(duì)象 token := jwt.New(jwt.SigningMethodHS256) // 設(shè)置Token的自定義聲明 claims := token.Claims.(jwt.MapClaims) claims["username"] = username claims["exp"] = time.Now().Add(time.Hour * 24).Unix() // 設(shè)置Token的過(guò)期時(shí)間 // 使用密鑰對(duì)Token進(jìn)行簽名,生成最終的Token字符串 tokenString, _ := token.SignedString([]byte(secretKey)) return tokenString } func parseToken(tokenString string, secretKey string) (jwt.MapClaims, error) { // 解析Token字符串 token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { return []byte(secretKey), nil }) if err != nil { return nil, err } // 驗(yàn)證Token的簽名方法是否有效 if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { return nil, fmt.Errorf("無(wú)效的簽名方法:%v", token.Header["alg"]) } // 返回Token中的聲明部分 if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid { return claims, nil } return nil, fmt.Errorf("無(wú)效的Token") }
消息中間件
func JWT() gin.HandlerFunc { return func(c *gin.Context) { c.Abort() c.Next() } }
到此這篇關(guān)于Golang token的生成和解析詳解的文章就介紹到這了,更多相關(guān)Golang token生成和解析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang?依賴注入經(jīng)典解決方案uber/fx理論解析
這篇文章主要為大家介紹了Golang依賴注入經(jīng)典解決方案uber/fx理論解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05深入探討Go語(yǔ)言中的預(yù)防性接口為什么是不必要的
在Go語(yǔ)言中,有一種從其他語(yǔ)言帶來(lái)的常見(jiàn)模式:預(yù)防性接口,雖然這種模式在?Java?等語(yǔ)言中很有價(jià)值,但在Go中往往會(huì)成為反模式,本文我們就來(lái)深入探討一下原因2025-01-01GoLang中socket心跳檢測(cè)的實(shí)現(xiàn)
本文主要介紹了GoLang中socket心跳檢測(cè)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02