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正则之命名分组方式
Apr 25 Golang
golang 实现时间戳和时间的转化
May 07 Golang
golang 实用库gotable的具体使用
Jul 01 Golang
基于Go语言构建RESTful API服务
Jul 25 Golang
Golang并发操作中常见的读写锁详析
Aug 30 Golang
golang语言指针操作
Apr 14 Golang
GO语言字符串处理函数之处理Strings包
Apr 14 Golang
Golang Elasticsearches 批量修改查询及发送MQ
Apr 19 Golang
Go获取两个时区的时间差
Apr 20 Golang
Golang 实现WebSockets
Apr 24 Golang
在ubuntu下安装go开发环境的全过程
Aug 05 Golang
Go gorilla securecookie库的安装使用详解
Aug 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
可快速识别放射性物质-国外大神教你diy一个开放式辐射探测器
2020/03/12 无线电
PHP中集成PayPal标准支付的实现方法分享
2012/02/06 PHP
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
2013/06/01 PHP
浅析php过滤html字符串,防止SQL注入的方法
2013/07/02 PHP
PHP实现的数据对象映射模式详解
2019/03/20 PHP
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
2011/10/10 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
2014/06/06 Javascript
jQuery中outerHeight()方法用法实例
2015/01/19 Javascript
jquery+css3实现网页背景花瓣随机飘落特效
2015/08/17 Javascript
JS使用eval解析JSON的注意事项分析
2015/11/14 Javascript
延时加载JavaScript代码提高速度
2015/12/27 Javascript
javascript每日必学之多态
2016/02/23 Javascript
js利用appendChild对标签进行排序的实现方法
2016/10/16 Javascript
常用的javascript设计模式
2017/01/11 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
详解Angular 4 表单快速入门
2017/06/05 Javascript
jQuery.Form实现Ajax上传文件同时设置headers的方法
2017/06/26 jQuery
vue.js声明式渲染和条件与循环基础知识
2017/07/31 Javascript
JS验证输入的是否是数字及保留几位小数问题
2018/05/09 Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
2018/10/29 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
js实现一个页面多个倒计时的3种方法
2019/02/25 Javascript
Vue.js中的组件系统
2019/05/30 Javascript
Element InfiniteScroll无限滚动的具体使用方法
2020/07/27 Javascript
[01:33]DOTA2上海特级锦标赛 LIQUID战队完整宣传片
2016/03/16 DOTA
在python的WEB框架Flask中使用多个配置文件的解决方法
2014/04/18 Python
Python标准库shutil用法实例详解
2018/08/13 Python
python 并发编程 多路复用IO模型详解
2019/08/20 Python
纯css3实现思维导图样式示例
2018/11/01 HTML / CSS
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
2019/01/17 HTML / CSS
运动会广播稿30字
2014/01/21 职场文书
安全生产管理合理化建议书
2014/03/12 职场文书
《路旁的橡树》教学反思
2014/04/07 职场文书
应届大学生自荐书
2014/06/17 职场文书
国家税务局干部作风整顿整改措施
2014/09/18 职场文书
优质护理心得体会
2016/01/22 职场文书