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语言中break label与goto label的区别
Apr 28 Golang
golang 在windows中设置环境变量的操作
Apr 29 Golang
golang DNS服务器的简单实现操作
Apr 30 Golang
goland设置颜色和字体的操作
May 05 Golang
Golang全局变量加锁的问题解决
May 08 Golang
Golang生成Excel文档的方法步骤
Jun 09 Golang
golang fmt格式“占位符”的实例用法详解
Jul 04 Golang
Go语言并发编程 sync.Once
Oct 16 Golang
Go语言基础函数基本用法及示例详解
Nov 17 Golang
golang实现浏览器导出excel文件功能
Mar 25 Golang
Go语言编译原理之源码调试
Aug 05 Golang
GO中sync包自由控制并发示例详解
Aug 05 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
中东人咖啡哲学
2021/03/03 咖啡文化
php购物车实现代码
2011/10/10 PHP
使用php语句将数据库*.sql文件导入数据库
2014/05/05 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
2016/01/05 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
网络图片延迟加载实现代码 超越jquery控件
2010/03/27 Javascript
js null,undefined,字符串小结
2010/08/21 Javascript
jquery自定义属性(类型/属性值)
2013/05/21 Javascript
从JQuery源码分析JavaScript函数的apply方法与call方法
2014/09/25 Javascript
JS中FRAME的操作问题实例分析
2014/10/21 Javascript
JS集成fckeditor及判断内容是否为空的方法
2016/05/27 Javascript
利用Angularjs和bootstrap实现购物车功能
2016/08/31 Javascript
jquery对象和DOM对象的相互转换详解
2016/10/18 Javascript
Bootstrap轮播图学习使用
2017/02/10 Javascript
详解angular中的作用域及继承
2017/05/31 Javascript
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
关于axios不能使用Vue.use()浅析
2018/01/12 Javascript
简单通过settimeout看javascript的运行机制
2019/05/10 Javascript
前端Electron新手入门教程详解
2019/06/21 Javascript
jquery插件开发模式实例详解
2019/07/20 jQuery
vue实现路由监听和参数监听
2019/10/29 Javascript
[01:07:15]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第二场 1月25日
2021/03/11 DOTA
Python选课系统开发程序
2016/09/02 Python
python+opencv实现动态物体识别
2018/01/09 Python
Python if语句知识点用法总结
2018/06/10 Python
Python实现的NN神经网络算法完整示例
2018/06/19 Python
python opencv读mp4视频的实例
2018/12/07 Python
Python面向对象程序设计类的多态用法详解
2019/04/12 Python
Python实现的统计文章单词次数功能示例
2019/07/08 Python
Python连接Mysql进行增删改查的示例代码
2020/08/03 Python
Skyscanner香港:机票比价, 平机票和廉价航空机票预订
2020/02/07 全球购物
护士演讲稿优秀范文
2014/04/30 职场文书
教师党员整改措施
2014/10/24 职场文书
python 制作一个gui界面的翻译工具
2021/05/14 Python
处理canvas绘制图片模糊问题
2022/05/11 Javascript