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语言map与string的相互转换的实现
Apr 07 Golang
Go语言使用select{}阻塞main函数介绍
Apr 25 Golang
go 原生http web 服务跨域restful api的写法介绍
Apr 27 Golang
对Golang中的FORM相关字段理解
May 02 Golang
golang 实现时间戳和时间的转化
May 07 Golang
golang中的并发和并行
May 08 Golang
Golang标准库syscall详解(什么是系统调用)
May 25 Golang
Golang二维数组的使用方式
May 28 Golang
go语言使用Casbin实现角色的权限控制
Jun 26 Golang
golang内置函数len的小技巧
Jul 25 Golang
Golang入门之计时器
May 04 Golang
详解Go语言中配置文件使用与日志配置
Jun 01 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读注册表
2006/10/09 PHP
PHP 编程安全性小结
2010/01/08 PHP
PHP实现的mysql读写分离操作示例
2018/05/22 PHP
js调试系列 源码定位与调试[基础篇]
2014/06/18 Javascript
关于编写性能高效的javascript事件的技术
2014/11/28 Javascript
Ionic快速安装教程
2016/06/03 Javascript
JavaScript数据存储 Cookie篇
2016/07/02 Javascript
js省市区级联查询(插件版&无插件版)
2017/03/21 Javascript
Vuex简单入门
2017/04/19 Javascript
jQuery操作css样式
2017/05/15 jQuery
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
浅析从vue源码看观察者模式
2018/01/29 Javascript
vue异步axios获取的数据渲染到页面的方法
2018/08/09 Javascript
Phaser.js实现简单的跑酷游戏附源码下载
2018/10/26 Javascript
为python设置socket代理的方法
2015/01/14 Python
深入解析Python中的上下文管理器
2016/06/28 Python
Django 迁移、操作数据库的方法
2019/08/02 Python
Python产生一个数值范围内的不重复的随机数的实现方法
2019/08/21 Python
python3注册全局热键的实现
2020/03/22 Python
详解查看Python解释器路径的两种方式
2020/10/15 Python
Python3+Flask安装使用教程详解
2021/02/16 Python
哥伦比亚最大的网上商店:Linio哥伦比亚
2016/09/25 全球购物
家乐福巴西网上超市:Carrefour巴西
2016/10/31 全球购物
英国奢侈皮具品牌:Aspinal of London
2018/09/02 全球购物
CK巴西官方网站:Calvin Klein巴西
2019/07/19 全球购物
德国最大的婴儿用品网上商店:Kidsroom.de(支持中文)
2020/09/02 全球购物
五好党支部事迹材料
2014/02/06 职场文书
迟到早退检讨书
2014/02/10 职场文书
市场营销方案范文
2014/03/11 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
离婚财产分配协议书
2014/10/21 职场文书
自主招生自荐信格式
2015/03/04 职场文书
服装店员工管理制度
2015/08/07 职场文书
小学生法制教育心得体会
2016/01/14 职场文书
利用python进行数据加载
2021/06/20 Python
我国拿下天问一号火星着陆区附近 22 个地理实体命名:平乐、西柏坡、古田、漠河等
2022/04/29 数码科技