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 生成对应的数据表struct定义操作
Apr 28 Golang
golang 如何用反射reflect操作结构体
Apr 28 Golang
Golang 使用Map实现去重与set的功能操作
Apr 29 Golang
Go语言 go程释放操作(退出/销毁)
Apr 30 Golang
golang 比较浮点数的大小方式
May 02 Golang
go语言中fallthrough的用法说明
May 06 Golang
解决Goland 同一个package中函数互相调用的问题
May 06 Golang
Go遍历struct,map,slice的实现
Jun 13 Golang
go goroutine 怎样进行错误处理
Jul 16 Golang
使用GO语言实现Mysql数据库CURD的简单示例
Aug 07 Golang
Golang数据类型和相互转换
Apr 12 Golang
GoFrame基于性能测试得知grpool使用场景
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
通过PHP CLI实现简单的数据库实时监控调度
2009/07/01 PHP
php 深入理解strtotime函数的使用详解
2013/05/23 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
2015/12/20 PHP
yii框架搜索分页modle写法
2016/12/19 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
laravel-admin 中列表筛选方法
2019/10/03 PHP
javascript实现动态增加删除表格行(兼容IE/FF)
2007/04/02 Javascript
入门基础学习 ExtJS笔记(一)
2010/11/11 Javascript
JQuery性能优化的几点建议
2014/05/14 Javascript
调整小数的格式保留小数点后两位
2014/05/14 Javascript
jQuery实现表格展开与折叠的方法
2015/05/04 Javascript
Javascript基于AJAX回调函数传递参数实例分析
2015/12/15 Javascript
基于jquery编写的放大镜插件
2016/03/23 Javascript
Node.js操作mysql数据库增删改查
2016/03/30 Javascript
JavaScript中的继承之类继承
2016/05/01 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
2016/10/13 Javascript
javascript数组去重常用方法实例分析
2017/04/11 Javascript
p5.js入门教程之小球动画示例代码
2018/03/15 Javascript
Node.Js中实现端口重用原理详解
2018/05/03 Javascript
微信小程序url传参写变量的方法
2018/08/09 Javascript
js中自定义react数据验证组件实例详解
2018/10/19 Javascript
vue+iview动态渲染表格详解
2019/03/19 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
用Python的urllib库提交WEB表单
2009/02/24 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
浅谈Python接口对json串的处理方法
2018/12/19 Python
使用Python做定时任务及时了解互联网动态
2019/05/15 Python
k-means 聚类算法与Python实现代码
2020/06/01 Python
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
New Balance天猫官方旗舰店:始于1906年,百年慢跑品牌
2017/11/15 全球购物
教师学期末个人总结
2015/02/13 职场文书
道歉情书大全
2015/05/12 职场文书
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis
《王者天下》第4季首话新剧照 4月9日正式开播
2022/04/07 日漫