Golang jwt身份认证


Posted in Golang onApril 20, 2022
目录

这几天在学习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结构体,里面可以定义过期时间颁发者等等

Golang jwt身份认证

Golang jwt身份认证

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

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

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

Golang jwt身份认证

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

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

Golang jwt身份认证

在前端登录时,将加密后的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"])

Golang jwt身份认证

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

Golang jwt身份认证

 到此这篇关于go语言使用jwt认证的实现的文章就介绍到这了!

Golang 相关文章推荐
golang中实现给gif、png、jpeg图片添加文字水印
Apr 26 Golang
基于Go Int转string几种方式性能测试
Apr 28 Golang
Go使用协程交替打印字符
Apr 29 Golang
Golang 使用Map实现去重与set的功能操作
Apr 29 Golang
golang switch语句的灵活写法介绍
May 06 Golang
关于golang高并发的实现与注意事项说明
May 08 Golang
Go语言设计模式之结构型模式
Jun 22 Golang
Go语言读取txt文档的操作方法
Jan 22 Golang
如何利用golang运用mysql数据库
Mar 13 Golang
Go归并排序算法的实现方法
Apr 06 Golang
Go 内联优化让程序员爱不释手
Jun 21 Golang
实现GO语言对数组切片去重
Apr 20 #Golang
Golang日志包的使用
Apr 20 #Golang
Golang获取List列表元素的四种方式
Apr 20 #Golang
Golang 对es的操作实例
Apr 20 #Golang
Golang 遍历二叉树
Apr 19 #Golang
Golang MatrixOne使用介绍和汇编语法
Apr 19 #Golang
Golang 字符串的常见操作
You might like
在项目中寻找代码的坏命名
2012/07/14 PHP
PHP生成sitemap.xml地图函数
2013/11/13 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
2016/02/03 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
JavaScript 在各个浏览器中执行的耐性
2009/04/06 Javascript
javascript 设置文本框中焦点的位置
2009/11/20 Javascript
jQuery开发者都需要知道的5个小技巧
2010/01/08 Javascript
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
jquery ui resizable bug解决方法
2010/10/26 Javascript
动态获取复选框checkbox选中个数的jquery代码
2013/06/25 Javascript
利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)
2013/11/25 Javascript
javascript中一些util方法汇总
2015/06/10 Javascript
js预加载图片方法汇总
2015/06/15 Javascript
javascript中递归的两种写法
2017/01/17 Javascript
bootstrap confirmation按钮提示组件使用详解
2017/08/22 Javascript
webpack打包react项目的实现方法
2018/06/21 Javascript
cnpm加速Angular项目创建的方法
2018/09/07 Javascript
利用Vue构造器创建Form组件的通用解决方法
2018/12/03 Javascript
基于vue 实现表单中password输入的显示与隐藏功能
2019/07/19 Javascript
JS中的模糊查询功能
2019/12/08 Javascript
[01:59]DOTA2首部纪录片《Free to play》预告片
2014/03/12 DOTA
[01:21]2018DOTA2亚洲邀请赛4.5采访 打DOTA2也能有女朋友?
2018/04/06 DOTA
用Python制作检测Linux运行信息的工具的教程
2015/04/01 Python
安装ElasticSearch搜索工具并配置Python驱动的方法
2015/12/22 Python
解决PyCharm中光标变粗的问题
2017/08/05 Python
浅谈Pandas 排序之后索引的问题
2018/06/07 Python
python 读取dicom文件,生成info.txt和raw文件的方法
2019/01/24 Python
Origins悦木之源英国官网:雅诗兰黛集团高端植物护肤品牌
2017/11/06 全球购物
与C++相比,Java中的数组有什么不同
2014/03/25 面试题
反腐倡廉警示教育活动总结
2014/05/05 职场文书
社区综治工作汇报
2014/10/27 职场文书
检讨书格式
2019/04/25 职场文书
阿里云Nginx配置https实现域名访问项目(图文教程)
2021/03/31 Servers
把77A收信机改造成收音机
2022/04/05 无线电