Golang token的生成和解析详解

 更新时间:2024年02月11日 10:18:58   作者:gogogo不想敲代码  
这篇文章主要给大家介绍了Golang token的生成和解析,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下

Golang token的生成和解析

使用第三方库来实现

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 {
	// 创建一个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生成和解析内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何使用go-zero开发线上项目

    如何使用go-zero开发线上项目

    这篇文章主要介绍了如何使用go-zero开发线上项目,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 简单聊聊Go for range中容易踩的坑

    简单聊聊Go for range中容易踩的坑

    for循环问题,在面试中经常都会被问到,并且在实际业务项目中也经常用到for循环,要是没用好,一不下心就掉坑,本文就来讲讲Go for range中容易踩的坑吧
    2023-03-03
  • golang中json的omitempty使用操作

    golang中json的omitempty使用操作

    这篇文章主要介绍了golang中json的omitempty使用操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Golang语言中的Prometheus的日志模块使用案例代码编写

    Golang语言中的Prometheus的日志模块使用案例代码编写

    这篇文章主要介绍了Golang语言中的Prometheus的日志模块使用案例,本文给大家分享源代码编写方法,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • 详解Go module的介绍及使用

    详解Go module的介绍及使用

    module是一个相关Go包的集合,它是源代码更替和版本控制的单元。这篇文章主要介绍了Go module的介绍及使用,需要的朋友可以参考下
    2020-10-10
  • GO语言开发环境搭建过程图文详解

    GO语言开发环境搭建过程图文详解

    这篇文章主要介绍了GO语言开发环境搭建过程图文详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • golang db事务的统一封装的实现

    golang db事务的统一封装的实现

    这篇文章主要介绍了golang db事务的统一封装的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • GO语言的IO方法实例小结

    GO语言的IO方法实例小结

    这篇文章主要介绍了GO语言的IO方法实例小结,Docker的火爆促成了当下新兴的Go语言人气的大幅攀升,需要的朋友可以参考下
    2015-10-10
  • golang语言编码规范的实现

    golang语言编码规范的实现

    这篇文章主要介绍了golang语言编码规范的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • go语言中函数与方法介绍

    go语言中函数与方法介绍

    这篇文章介绍了go语言中的函数与方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07

最新评论