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 相关文章推荐
go结构体嵌套的切片数组操作
Apr 28 Golang
golang 实现两个结构体复制字段
Apr 28 Golang
Golang 空map和未初始化map的注意事项说明
Apr 29 Golang
解决go在函数退出后子协程的退出问题
Apr 30 Golang
Go 自定义package包设置与导入操作
May 06 Golang
解决goland 导入项目后import里的包报红问题
May 06 Golang
Golang中异常处理机制详解
Jun 08 Golang
浅谈Golang 切片(slice)扩容机制的原理
Jun 09 Golang
Golang的继承模拟实例
Jun 30 Golang
一文搞懂Golang 时间和日期相关函数
Dec 06 Golang
Go语言grpc和protobuf
Apr 13 Golang
golang语言指针操作
Apr 14 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数组函数序列之array_flip() 将数组键名与值对调
2011/11/07 PHP
php 判断数组是几维数组
2013/03/20 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
2016/03/31 PHP
PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
2016/09/11 PHP
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
2010/08/27 Javascript
JsDom 编程小结
2011/08/09 Javascript
深入理解JS DOM事件机制
2016/08/06 Javascript
jQuery实现邮箱下拉列表自动补全功能
2016/09/08 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
小程序扫描普通链接二维码跳转小程序指定界面方法
2019/05/07 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
2020/01/12 Javascript
js删除对象中的某一个字段的方法实现
2021/01/11 Javascript
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
2014/01/23 Python
python缩进区别分析
2014/02/15 Python
Python命令行参数解析模块optparse使用实例
2015/04/13 Python
tensorflow输出权重值和偏差的方法
2018/02/10 Python
详解Python 正则表达式模块
2018/11/05 Python
python定时按日期备份MySQL数据并压缩
2019/04/19 Python
Python求离散序列导数的示例
2019/07/10 Python
基于python的BP神经网络及异或实现过程解析
2019/09/30 Python
python3实现从kafka获取数据,并解析为json格式,写入到mysql中
2019/12/23 Python
TFRecord格式存储数据与队列读取实例
2020/01/21 Python
Python中关于logging模块的学习笔记
2020/06/03 Python
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
2012/12/13 HTML / CSS
Bobbi Brown芭比波朗美国官网:化妆师专业彩妆保养品品牌
2016/08/18 全球购物
电子商务毕业生求职信
2013/11/10 职场文书
大三毕业自我鉴定
2014/01/15 职场文书
退休教师欢送会主持词
2014/03/31 职场文书
新书发布会策划方案
2014/06/09 职场文书
《弟子规》读后感:知廉耻、明是非、懂荣辱、辨善恶
2019/12/03 职场文书
《思路决定出路》读后感3篇
2019/12/11 职场文书
python超详细实现完整学生成绩管理系统
2022/03/17 Python
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python
baselines示例程序train_cartpole.py的ImportError
2022/05/20 Python
MySql数据库触发器使用教程
2022/06/01 MySQL
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL