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 正则匹配效率详解
Apr 25 Golang
Go语言带缓冲的通道实现
Apr 26 Golang
go语言基础 seek光标位置os包的使用
May 09 Golang
再次探讨go实现无限 buffer 的 channel方法
Jun 13 Golang
golang中字符串MD5生成方式总结
Jul 04 Golang
golang实现浏览器导出excel文件功能
Mar 25 Golang
golang连接MySQl使用sqlx库
Apr 14 Golang
golang用type-switch判断interface的实际存储类型
Apr 14 Golang
Golang获取List列表元素的四种方式
Apr 20 Golang
Golang 入门 之url 包
May 04 Golang
Go 内联优化让程序员爱不释手
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 XML error parsing SOAP payload on line 1
2010/06/17 PHP
php实现用于计算执行时间的类实例
2015/04/18 PHP
微信利用PHP创建自定义菜单的方法
2016/08/01 PHP
详解yii2使用多个数据库的案例
2017/06/16 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
高性能Javascript笔记 数据的存储与访问性能优化
2012/08/02 Javascript
Js中的onblur和onfocus事件应用介绍
2013/08/27 Javascript
jquery 倒计时效果实现秒杀思路
2013/09/11 Javascript
jquery实现的蓝色二级导航条效果代码
2015/08/24 Javascript
Javascript之深入浅出prototype
2017/02/06 Javascript
selenium 与 chrome 进行qq登录并发邮件操作实例详解
2017/04/06 Javascript
mac下的nodejs环境安装的步骤
2017/05/24 NodeJs
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
详解vue-cli 本地开发mock数据使用方法
2018/05/29 Javascript
javascript中一些奇葩的日期换算方法总结
2018/11/14 Javascript
layer弹出子iframe层父子页面传值的实现方法
2018/11/22 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
2019/09/11 Javascript
js实现漂亮的星空背景
2019/11/01 Javascript
[44:01]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS paiN
2018/03/31 DOTA
Python下的twisted框架入门指引
2015/04/15 Python
Java中重定向输出流实现用文件记录程序日志
2015/06/12 Python
详解Python中的变量及其命名和打印
2016/03/11 Python
python制作企业邮箱的爆破脚本
2016/10/05 Python
Python实现自动发送邮件功能
2021/03/02 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
python做反被爬保护的方法
2019/07/01 Python
浅析PEP570新语法: 只接受位置参数
2019/10/15 Python
使用Python FastAPI构建Web服务的实现
2020/06/08 Python
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
客服端调用EJB对象的几个基本步骤
2012/01/15 面试题
护士自我鉴定
2013/10/23 职场文书
不同意离婚答辩状
2015/05/22 职场文书
甜美蛋糕店的创业计划书模板,拿来即用!
2019/08/21 职场文书
JS封装cavans多种滤镜组件
2022/02/15 Javascript
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏
USB TYPE-C 或将成为所有智能手机充电标准
2022/04/21 数码科技