亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Golang token的生成和解析詳解

 更新時間:2024年02月11日 10:18:58   作者:gogogo不想敲代碼  
這篇文章主要給大家介紹了Golang token的生成和解析,文中通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下

Golang token的生成和解析

使用第三方庫來實現(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)建一個Token對象
	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的過期時間

	// 使用密鑰對Token進行簽名,生成最終的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
	}

	// 驗證Token的簽名方法是否有效
	if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
		return nil, fmt.Errorf("無效的簽名方法:%v", token.Header["alg"])
	}

	// 返回Token中的聲明部分
	if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
		return claims, nil
	}

	return nil, fmt.Errorf("無效的Token")
}

消息中間件

func JWT() gin.HandlerFunc {
	return func(c *gin.Context) {
		c.Abort()
		c.Next()
	}
}

到此這篇關(guān)于Golang token的生成和解析詳解的文章就介紹到這了,更多相關(guān)Golang token生成和解析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang二進制反匯編問題

    Golang二進制反匯編問題

    這篇文章主要介紹了Golang二進制反匯編問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Golang?依賴注入經(jīng)典解決方案uber/fx理論解析

    Golang?依賴注入經(jīng)典解決方案uber/fx理論解析

    這篇文章主要為大家介紹了Golang依賴注入經(jīng)典解決方案uber/fx理論解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Go 中閉包的底層原理

    Go 中閉包的底層原理

    這篇文章主要介紹了Go 中閉包的底層原理,閉包的基本原理是一種現(xiàn)象,一個函數(shù)內(nèi)引用了外部的局部變量的現(xiàn)象,帶著些許的了解和小編一起進入文章正題學習
    2021-10-10
  • 深入探討Go語言中的預防性接口為什么是不必要的

    深入探討Go語言中的預防性接口為什么是不必要的

    在Go語言中,有一種從其他語言帶來的常見模式:預防性接口,雖然這種模式在?Java?等語言中很有價值,但在Go中往往會成為反模式,本文我們就來深入探討一下原因
    2025-01-01
  • OpenTelemetry-go的SDK使用方法詳解

    OpenTelemetry-go的SDK使用方法詳解

    這篇文章主要介紹了OpenTelemetry-go的SDK使用方法,OpenTelemetry幫我們實現(xiàn)了相應語言的SDK,所以我們只需要進行調(diào)用即可,本文根據(jù)官方文檔實例講解,需要的朋友可以參考下
    2022-09-09
  • 探索Go語言中的switch高級用法

    探索Go語言中的switch高級用法

    在Go語言中,switch語句除了常見的用法外,還有一種不常用但有趣的寫法,這種寫法中,switch后面不跟任何表達式,而每個case后面跟的是返回bool類型的函數(shù)調(diào)用表達式,這實際上是一個等價于switch true的用法,通過從上到下逐一比較case后的表達式是否為true來決定執(zhí)行哪個分支
    2024-10-10
  • Golang通道的無阻塞讀寫的方法示例

    Golang通道的無阻塞讀寫的方法示例

    這篇文章主要介紹了Golang通道的無阻塞讀寫的方法示例,詳細的介紹了哪些情況會存在阻塞,以及如何使用select解決阻塞,非常具有實用價值,需要的朋友可以參考下
    2018-11-11
  • GoLang中socket心跳檢測的實現(xiàn)

    GoLang中socket心跳檢測的實現(xiàn)

    本文主要介紹了GoLang中socket心跳檢測的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-02-02
  • Golang收支記賬程序詳細編寫過程

    Golang收支記賬程序詳細編寫過程

    這篇文章主要介紹了Golang實現(xiàn)收支記賬程序流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-12-12
  • 一文理解Go 中的可尋址和不可尋址

    一文理解Go 中的可尋址和不可尋址

    如果字典的元素不存在,則返回零值,而零值是不可變對象,如果能尋址問題就大了。而如果字典的元素存在,考慮到 Go 中 map 實現(xiàn)中元素的地址是變化的,這意味著尋址的結(jié)果也是無意義的。下面我們就圍繞這個話題寫一篇文章吧,需要的朋友可以參考一下
    2021-10-10

最新評論