【视频】登录鉴权的三种方式:token、jwt、session实战分享
视频教程
我之前既对接过session/cookie,也对接过JWT。今年因为工作需要也对接了gtoken的2个版本,对这方面的理解还算深入。
尤其是看到官方文档评论区有小伙伴表示看不懂,所以做了这期视频内容出来:
内容提要:
- 结合商业项目需求集成gtoken
- gtoken缓存模式gcache和gredis使用对比
- 登录鉴权后将用户信息赋值到context,供后续链路调用
- 自定义登录、登出、权限验证方法,各个方法分别写什么业务逻辑合适
http://mpvideo.qpic.cn/0bc3n4aeqaaauuapbamojjrva36djbxqasaa.f10002.mp4?dis_k=e6ec8c0bff6fbcf4e1e385d7ab59610a&dis_t=1673158170&play_scene=10400&vid=wxv_2696191414908551170&format_id=10002&support_redirect=0&mmversion=false
源码分享
因为涉及的知识点比较多,视频内容比较长。
如果你觉得看视频浪费时间,可以直接阅读源码:
- goframe v2版本集成gtoken[1]
- 分支:main分支
- goframe v1版本集成gtoken[2]
- 分支:main分支
- goframe v2版本集成jwt[3]
- 分支:l10_登录鉴权_jwt_自定义中间件
- goframe v2版本session登录[4]
- 分支:l09_登录鉴权_session
- 官方调用示例文档[5] 源码gitHub [1]goframe v2版本集成gtoken: https://github.com/wangzhongyang007/goframe-shop-v2[2]goframe v1版本集成gtoken: https://github.com/wangzhongyang007/goframe-shop[3]goframe v2版本集成jwt: https://github.com/wangzhongyang007/goframe-shop-v2[4]goframe v2版本session登录: https://github.com/wangzhongyang007/goframe-shop-v2[5]官方调用示例文档: https://goframe.org/pages/viewpage.action?pageId=3671940
基本介绍
这期重点介绍Gtoken的对接:
Gtoken
是基于GoFrame
框架的token插件,通过服务端验证方式实现token认证;已完全可以支撑线上token认证,通过Redis支持集群模式;
- github地址:https://github.com/goflyfox/gtoken
- gitee地址:https://gitee.com/goflyfox/gtoken
注意问题:全面适配GoFrame v2.0.0 ;GoFrame v1.X.X 请使用gtoken v1.4.X相关版本。
gtoken优势
- gtoken支撑单点应用使用内存存储,也支持集群使用redis存储;完全适用于企业生产级使用;
- 有效避免了jwt服务端无法退出问题;
- 解决jwt无法作废已颁布的令牌,只能等到令牌过期问题;
- 通过用户扩展信息存储在服务端,有效规避了jwt携带大量用户扩展信息导致降低传输效率问题;
- 有效避免jwt需要客户端实现续签功能,增加客户端复杂度;支持服务端自动续期,客户端不需要关心续签逻辑;
特性说明
支持token认证,不依赖于session和cookie,适用jwt和session认证所有场景;
支持单机gcache和集群gredis模式;
# 缓存模式 1 gcache 2 gredis 3 fileCache
CacheMode = 2
支持服务端缓存自动续期功能
// 注:通过MaxRefresh,默认当用户第五天访问时,自动续期
// 超时时间 默认10天
Timeout int
// 缓存刷新时间 默认为超时时间的一半
MaxRefresh int
支持分组拦截、全局拦截、深度路径拦截,便于根据个人需求定制拦截器;建议使用分组拦截方式;
框架使用简单,只需要设置登录验证方法以及登录、登出路径即可;
在gtoken v1.4.0
版本开始支持分组中间件方式实现,但依然兼容全局和深度中间件实现方式;
对比JWT
- 相比于JWT,Gtoken最大的特点是“有状态”
- 另外一个特点是不需要客户端刷新token,而是服务端自动刷新token的过期时间
大家结合自己的场景去使用,不要刻意去追求“无状态”或者“有状态”。
能解决自己实际问题的才是好插件:
上图红框,是插件作者在官方文档评论区的解答。我也比较认同这个观点。
延伸
之前分享jwt和OAuth文章的时候,和群里的一位大佬探讨过SSO的问题。
如果你在登录鉴权方面有很高的要求,比如要和灰产斗智斗勇,或者会被恶意攻击,那么建议你自己深入了解OAuth原理,在这里也推荐一个很不错的开源项目:https://github.com/ego-component/eoauth2
- 根据开源项目 https://github.com/openshift/osin 做了大量改造
- 支持http oauth2 server
- 支持grpc oauth2 server
- 支持多客户端的sso服务
- 支持类似notion,多账户登录同一个网页
- 支持后台踢掉某个终端登录态
- 支持配置终端个数,挤下线
- 支持查看token信息,例如UA,client ip, platform
好了,这期内容就到这里,感谢大家的观看,欢迎点赞支持。
相关文章
- Typora+PicGo+GitHub实现图片快速上传
- Linux计划任务服务程序
- 2022 如何在 GitHub 上搭建个人网站(github.io)
- 虚拟机安装linux无法访问外网解决办法
- 用过 mongodb 吧, 这三个大坑踩过吗?
- 教你配置windows上的windbg,linux上的lldb,打入clr内部这一篇就够了
- MongoDB 在评论中台的实践
- 使用mongodb作为Quartz.Net下的JobStore实现底层的持久化机制
- mongodb之使用explain和hint性能分析和优化
- mongodb 3.x 之实用新功能窥看[2] ——使用$lookup做多表关联处理
- mongodb 3.x 之实用新功能窥看[1] ——使用TTLIndex做Cache处理
- 双十一来了,别让你的mongodb宕机了
- GO语言开发环境搭建笔记
- PHP判断网络连通
- 开启phpMyAdmin的远程登录
- PHP_cURL初始化和执行方法
- PHP经典函数收集
- PHP所有函数列表
- php bbcode过滤
- php不使用中间变量交换两个变量的值