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
go语言中切片与内存复制 memcpy 的实现操作
Apr 27 Golang
Golang 实现超大文件读取的两种方法
Apr 27 Golang
go 原生http web 服务跨域restful api的写法介绍
Apr 27 Golang
Golang之sync.Pool使用详解
May 06 Golang
解决golang 关于全局变量的坑
May 06 Golang
Go语言实现Snowflake雪花算法
Jun 08 Golang
Golang生成Excel文档的方法步骤
Jun 09 Golang
Golang 语言控制并发 Goroutine的方法
Jun 30 Golang
详解Go语言中配置文件使用与日志配置
Jun 01 Golang
Go Grpc Gateway兼容HTTP协议文档自动生成网关
Jun 16 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
在“咖啡之国”感受咖啡文化
2021/03/03 咖啡文化
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
Destoon实现多表查询示例
2014/08/21 PHP
PHP获取毫秒级时间戳的方法
2015/04/15 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
JQuery 风格的HTML文本转义
2009/07/01 Javascript
JavaScript null和undefined区别分析
2009/10/14 Javascript
JQuery文本框高亮显示插件代码
2011/04/02 Javascript
浅析JavaScript原型继承的陷阱
2013/12/03 Javascript
jquery如何获取复选框的值
2013/12/12 Javascript
谷歌showModalDialog()方法不兼容出现对话窗口的解决办法
2016/02/15 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
2016/02/23 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
2017/01/08 Javascript
vue-router 导航钩子的具体使用方法
2017/08/31 Javascript
JavaScript屏蔽Backspace键的实现代码
2017/11/02 Javascript
angularJs提交文本框数据到后台的方法
2018/10/08 Javascript
解决vue2 在mounted函数无法获取prop中的变量问题
2018/11/15 Javascript
JS异步执行结果获取的3种解决方式
2019/02/19 Javascript
Jquery实现获取子元素的方法分析
2019/08/24 jQuery
Python学习资料
2007/02/08 Python
Python创建文件和追加文件内容实例
2014/10/21 Python
Python机器学习之决策树算法实例详解
2017/12/06 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
2019/05/21 Python
Python用来做Web开发的优势有哪些
2020/08/05 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
2021/01/28 Python
python爬虫智能翻页批量下载文件的实例详解
2021/02/02 Python
意大利在线购买隐形眼镜网站:VisionDirect.it
2019/03/18 全球购物
大学毕业生的自我鉴定
2013/11/30 职场文书
爱祖国演讲稿
2014/05/04 职场文书
优秀共产党员先进事迹材料
2014/05/06 职场文书
社区公民道德宣传日活动总结
2015/03/23 职场文书
2015社区精神文明建设工作总结
2015/04/21 职场文书
圣贤教育改变命运观后感
2015/06/16 职场文书
担保书范文
2019/07/09 职场文书
MATLAB 如何求取离散点的曲率最大值
2021/04/16 Python
OpenCV全景图像拼接的实现示例
2021/06/05 Python