最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)

	// 設置Token的自定義聲明
	claims := token.Claims.(jwt.MapClaims)
	claims["username"] = username
	claims["exp"] = time.Now().Add(time.Hour * 24).Unix() // 設置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()
	}
}

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

相關文章

  • go語言求任意類型切片的長度操作

    go語言求任意類型切片的長度操作

    這篇文章主要介紹了go語言求任意類型切片的長度操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 使用go語言解析xml的實現(xiàn)方法(必看篇)

    使用go語言解析xml的實現(xiàn)方法(必看篇)

    下面小編就為大家?guī)硪黄褂胓o語言解析xml的實現(xiàn)方法(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Golang日志庫logrus的介紹與使用示例代碼

    Golang日志庫logrus的介紹與使用示例代碼

    Logrus是Go語言的一個功能豐富的日志庫,支持結構化日志和多級別日志記錄,它兼容標準log庫,并可通過自定義Hooks和Formatter進行高度定制化,支持集成如syslog等系統(tǒng),便于管理和分析,Logrus還支持自定義日志顏色和格式,以及根據(jù)日志級別進行不同處理,如panic和exit
    2024-10-10
  • 在Go中使用jwt的教程詳解

    在Go中使用jwt的教程詳解

    JWT (JSON Web Tokens) 是一種基于 JSON 格式的輕量級身份驗證和授權方案,用于在各方之間以JSON方式安全地傳輸信息,本文給大家詳細介紹了在Go中使用jwt的教程,文中通過代碼示例講解的非常詳細,需要的朋友可以參考下
    2024-06-06
  • golang在GRPC中設置client的超時時間

    golang在GRPC中設置client的超時時間

    這篇文章主要介紹了golang在GRPC中設置client的超時時間,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • golang實現(xiàn)無鎖隊列的三種方式

    golang實現(xiàn)無鎖隊列的三種方式

    本文主要介紹了golang實現(xiàn)無鎖隊列的三種方式,包括基于CAS操作的簡單有界隊列、Michael-Scott算法的無鎖鏈表隊列及Go簡化指針操作方法,感興趣的可以了解一下
    2026-04-04
  • Go?gRPC服務進階middleware使用教程

    Go?gRPC服務進階middleware使用教程

    這篇文章主要為大家介紹了Go?gRPC服務進階middleware的使用教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • golang實現(xiàn)并發(fā)數(shù)控制的方法

    golang實現(xiàn)并發(fā)數(shù)控制的方法

    下面小編就為大家分享一篇golang實現(xiàn)并發(fā)數(shù)控制的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • golang的時區(qū)和神奇的time.Parse的使用方法

    golang的時區(qū)和神奇的time.Parse的使用方法

    這篇文章主要介紹了golang的時區(qū)和神奇的time.Parse的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • 詳解Go語言中for range的

    詳解Go語言中for range的"坑"

    這篇文章主要介紹了詳解Go語言中for range的"坑",文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09

最新評論

贵州省| 葫芦岛市| 阿克苏市| 剑河县| 开鲁县| 城口县| 星子县| 舟曲县| 宁海县| 宜良县| 蚌埠市| 集安市| 阿巴嘎旗| 成武县| 祁连县| 库伦旗| 黄山市| 阿鲁科尔沁旗| 泽库县| 兴业县| 漾濞| 高阳县| 抚远县| 尤溪县| 汝城县| 启东市| 元朗区| 霍城县| 安新县| 资阳市| 百色市| 唐海县| 闽侯县| 濮阳市| 武夷山市| 怀仁县| 湟中县| 沁阳市| 商水县| 区。| 张家口市|