go语言使用jwt认证的实现

 更新时间:2022年04月20日 15:01:02   作者:sywdebug  
本文主要介绍了go语言使用jwt认证的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

这几天在学习nodejs,进一步了解npm,学习过程中解开了以前的一个疑惑,以前不知道token可以携带信息,只以为是用来做对比的,学到了jwt身份认证,知道了如何使用的,感觉很好用,但是我不用nodejs开发,所以就去看了下golang的,做下记录

刚学,博客内容写的可能不大对,因为基本都是自己的理解,术语用的可能也不到位,但是用起来倒是没问题,见谅

golang-jwt 项目仓库

使用以下命令获取

go get github.com/golang-jwt/jwt

加密

首先声明一串用于加密解密的秘钥

mySigningKey := []byte("asfasfdafasdfdasfa.")

然后使用jwt.NewWithClaimsnew一个token,这个玩意有两个参数,返回值就是token

第一个是加密方法,我这里使用的是hs256加密

第二个是加密的一些参数,可以使用自带的jwt.MapClaims,也可以自定义一个结构体,如果是自定义结构体需要实现jwt.StandardClaims结构体,里面可以定义过期时间颁发者等等

jwt.StandardClaims示例

jwt.MapClaims示例

我这里使用的是jwt.MapClaims,里面也可以定义过期时间等等,不同的就是写法不一样,我这里举例子设置过期时间为5秒

token:=jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
	"name": "司大帅",
	"exp": time.Now().Unix() + 5,
	"iss": "sywdebug",
})

下图就是token打印出来的结果

token输出示例

在将token返回给前端时候需要使用自己声明的秘钥加密一下,再返回给前端

tokenString, err := token.SignedString(mySigningKey)
if err != nil {
	log.Println(err.Error())
	return
}
fmt.Println("加密后的token字符串", tokenString)

加密后的token字符串

在前端登录时,将加密后的token字符串返回给前端,在调用需要验证的接口时将 token 传回后端,在后端进行解密验证

解密

解密使用jwt.Parse方法,如果上面使用了自定义结构体的话就使用jwt.ParseWithClaims方法
jwt.Parse有两个参数
第一个就是加密后的token字符串
第二个是一个自带的回调函数,将秘钥和错误return出来即可
jwt.ParseWithClaims有三个参数
第一个就是加密后的token字符串
第二个是加密使用的模板,例如上面示例将qqq传入即可
第三个是一个自带的回调函数,将秘钥和错误return出来即可

//在这里如果也使用jwt.ParseWithClaims的话,第二个参数就写jwt.MapClaims{}
//例如jwt.ParseWithClaims(tokenString, jwt.MapClaims{},func(t *jwt.Token) (interface{}, error){}

token, err = jwt.Parse(tokenString, func(t *jwt.Token) (interface{}, error) {
	return mySigningKey, nil
})
if err != nil {
	log.Println(err.Error())
	return
}
fmt.Println("token:", token)
fmt.Println("token.Claims:", token.Claims)
fmt.Println(token.Claims.(jwt.MapClaims)["name"])

结果示例

上面给的过期时间是5秒,如果加一个6秒的延迟再执行解析,就会返回token已过期了

token已过期示例

 到此这篇关于go语言使用jwt认证的实现的文章就介绍到这了,更多相关go语言 jwt认证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用GoLang Fiber进行高性能Web开发实例详解

    利用GoLang Fiber进行高性能Web开发实例详解

    这篇文章主要为大家介绍了利用GoLang Fiber进行高性能Web开发实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • 深入分析golang多值返回以及闭包的实现

    深入分析golang多值返回以及闭包的实现

    相对于C/C++,golang有很多新颖的特性,例如goroutine,channel等等,这些特性其实从golang源码是可以理解其实现的原理。今天这篇文章主要来分析下golang多值返回以及闭包的实现,因为这两个实现golang源码中并不存在,我们必须从汇编的角度来窥探二者的实现。
    2016-09-09
  • Golang中调用deepseekr1的教程详解

    Golang中调用deepseekr1的教程详解

    这篇文章主要为大家详细介绍了Golang中调用deepseekr1的相关教程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解下
    2025-02-02
  • Go语言学习之运算符使用详解

    Go语言学习之运算符使用详解

    这篇文章主要介绍了Go语言中常用运算符的使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • Go语言实现优雅关机和重启的示例详解

    Go语言实现优雅关机和重启的示例详解

    在Go语言中,实现优雅关机和重启通常涉及到处理系统信号,并确保在关闭前完成所有必要的清理工作,下面我们就来看看如何使用http.Server和os/signal包来实现优雅关机和重启吧
    2025-05-05
  • 解决go获取文件md5值不正确的问题

    解决go获取文件md5值不正确的问题

    本文主要介绍了解决go获取文件md5值不正确的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • Go与Redis实现分布式互斥锁和红锁

    Go与Redis实现分布式互斥锁和红锁

    这篇文章主要介绍了Go与Redis实现分布式互斥锁和红锁,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • 浅析Golang开发中goroutine的正确使用姿势

    浅析Golang开发中goroutine的正确使用姿势

    很多初级的Gopher在学习了goroutine之后,在项目中其实使用率不高,所以这篇文章小编主要来带大家深入了解一下goroutine的常见使用方法,希望对大家有所帮助
    2024-03-03
  • Go基础Slice教程详解

    Go基础Slice教程详解

    这篇文章主要介绍了Go基础Slice教程详解,需要的朋友可以参考下
    2018-02-02
  • Golang迭代如何在Go中循环数据结构使用详解

    Golang迭代如何在Go中循环数据结构使用详解

    这篇文章主要为大家介绍了Golang迭代之如何在Go中循环数据结构使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10

最新评论