【视频+源码】登录鉴权的三种方式:token、jwt、session实战分享

news2024/9/23 8:57:15

前言

因为我既对接过session、cookie,也对接过JWT,今年因为工作需要也对接了gtoken的2个版本,对这方面的理解还算深入。

尤其是看到官方文档评论区又小伙伴表示看不懂,所以做了这期视频内容出来:

内容提要:

  1. 结合商业项目需求集成gtoken
  2. gtoken缓存模式gcache和gredis使用对比
  3. 登录鉴权后将用户信息赋值到context,供后续链路调用
  4. 自定义登录、登出、权限验证方法,各个方法分别写什么业务逻辑合适

视频教程

视频在这里:本期内容对应B站的开源视频

源码分享

因为涉及的知识点比较多,视频内容比较长。

如果你觉得看视频浪费时间,可以直接阅读源码:

  • goframe v2版本集成gtoken

    • 分支:main
  • goframe v1版本集成gtoken

    • 分支:main
  • goframe v2版本集成jwt

    • 分支:l10_登录鉴权_jwt_自定义中间件
  • goframe v2版本session登录

    • 分支:l09_登录鉴权_session
  • 官方调用示例文档

基本介绍

jwt和session的对接教程之前分享过,不作为这期内容的重点。如有需要可以私信我。

这期重点介绍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优势

  1. gtoken支撑单点应用使用内存存储,也支持集群使用redis存储;完全适用于企业生产级使用;
  2. 有效的避免了jwt服务端无法退出问题;
  3. 解决jwt无法作废已颁布的令牌,只能等到令牌过期问题;
  4. 通过用户扩展信息存储在服务端,有效规避了jwt携带大量用户扩展信息导致降低传输效率问题;
  5. 有效避免jwt需要客户端实现续签功能,增加客户端复杂度;支持服务端自动续期,客户端不需要关心续签逻辑;

特性说明

  1. 支持token认证,不强依赖于session和cookie,适用jwt和session认证所有场景;
  2. 支持单机gcache和集群gredis模式;
# 缓存模式 1 gcache 2 gredis 3 fileCache
CacheMode = 2

支持服务端缓存自动续期功能
// 注:通过MaxRefresh,默认当用户第五天访问时,自动续期
// 超时时间 默认10天
Timeout int
// 缓存刷新时间 默认为超时时间的一半
MaxRefresh int
  1. 支持分组拦截、全局拦截、深度路径拦截,便于根据个人需求定制拦截器;建议使用分组拦截方式;
  2. 框架使用简单,只需要设置登录验证方法以及登录、登出路径即可;
  3. gtoken v1.4.0版本开始支持分组中间件方式实现,但依然兼容全局和深度中间件实现方式;

对比JWT

  1. 相比于JWT,Gtoken最大的特点是“有状态”
  2. 另外一个特点是不需要客户端刷新token,而是服务端自动刷新token的过期时间

大家结合自己的场景去使用,不要刻意去追求“无状态”或者“有状态”。能解决自己实际问题的才是好插件:

上图红框,是插件作者在官方文档评论区的解答。

延伸

之前分享jwt和gtoken文章的时候,和群里的一位大佬探讨过。

如果你在登录鉴权方面有很高的要求,比如要和灰产斗智斗勇,那么建议你自己深入了解OAuth原理

在这里也推荐一个很不错的开源项目:

https://github.com/ego-component/eoauth2

好了,这期内容就到这里,感谢大家的观看,欢迎点赞支持。

一起学习

感谢我群大佬,真是卧虎藏龙。

我们搞了一个有门槛的学编程专属群,大家一起学习打卡,互相督促,欢迎加入我们:

点这里—>加入高质量学编程专属群👏👏👏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/69013.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Centos】Docker停止容器服务后,磁盘I/O仍然迟迟不下降。(未解决)

记录前言问题复现,故障演练准备工作dcim-local演练过程系统日志message结论前言 安装了docker的服务器只运行了一个容器服务,停止容器服务后,磁盘I/O仍然迟迟不下降。对该现象进行问题复现,故障演练 问题复现,故障演…

STM32CUBEMX开发GD32F303(17)----移植兆易创新SPI Nor Flash之GD25Q64Flash

概述 本章STM32CUBEMX配置STM32F103,并且在GD32F303中进行开发,同时通过开发板内进行验证。 本例程主要讲解如何对芯片自带Flash进行读写,用芯片内部Flash可以对一些需要断电保存的数据进行保存,无需加外部得存储芯片&#xff0c…

UE4/5 PBR模型(带材质)导出Blender/UE4低版本/Unity方法

在项目中,经常会遇到,将UE5/UE4.27中制作好的模型导出。 一共有三种方法: 一、gltf文件导出 例:在UE5 5.1版本中,新建一个网格体,并赋予一个自定义材质 在UE5 中,打开Plugins ,勾选 gltf Exp…

今天杂志今天杂志社今天编辑部2022年第22期目录

理论专著 关于农村小学青年教师培养成长工作的几点思考 (1) 丁少乾 初中美术教学与学生研学旅行结合研究 (4) 刘媛 农村小学劳动教育与小学数学学科整合实践策略研究 (7) 张雪萍 浅谈中职学校《会计电算化》课程革命典型案例 (10) 赵雪梅 问题导向教学法在初中…

Python 常见单词-集合

为了方便大家更好的入门 Python 学习,已经整理好了 Python 语言入门常见 的英文单词,词汇量不大,大概百十来个,多敲多练,预估两周左右可以熟记!大家 加油噢~ 一、交互式环境与 print 输出 1、print&#x…

【JVM】对象实例化内存布局与访问定位

对象实例化 面试题 美团: 对象在JVM中是怎么存储的? 对象头信息里面有哪些东西? 蚂蚁金服: Java对象头有什么? 对象创建方式 new:最常见的方式、单例类中调用getInstance的静态类方法,XXXF…

spark技术特点

一、Hadoop是什么?Hadoop和Spark有什么区别 Hadoop是什么? Hadoop是一个开源的框架,可编写和运行分布式应用处理大规模数据,是专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式。HadoopHDFS&#xff0…

COHERENT VERDI 18w激光电源维修注意事项

主要功能: 该激光器可以进行皮秒、飞秒两种模式间的转换,为我们实现皮秒、飞秒级时间内的很快确定性激发提供了基础。同时激发激光需要有足够的功率,才能在少数甚至一个脉冲内确定性的将离子激发到激发态,按照计算选取了泵浦光18…

UAVDT数据集转化为MOT数据集(用作MOTR模型训练)

文章目录UAVDT数据集转化为MOT数据集MOT17 数据集格式traindet.txtgt.txtseqinfo.initestdet.txtUAVDT1. 自行创建下面文件夹路径2. 操作并得到gt.txtseqinfo.ini代码UAVDT数据集转化为MOT数据集 MOT17 数据集格式 ├── MOT17 │ ├── images │ ├── labels_with_…

人工智能期末考试

第一章-绪论 1. 人工智能的定义 定义:使机器的软件或程序,通过某些算法进行数据学习,并使用所学进行仿人决策。 2. 人工智能的各种认知观 符号主义(symbolism) 原理:基于物理符号系统假设和有限合理性原理,起源于数…

SoviChart数据可视化:燃尽图(Burn down chart)

在一个完美的世界里,敏捷项目中的每个Sprint都会完全按计划进行,用户将提供充足的时间表,项目的各个方面都将保持正轨。但是,在现实世界中,会出现范围变化和不可预见的问题,这可能会导致会议和项目时间表延…

Oracle数据表ID自增操作

1、SQL编写 -- 新建用户 create user root IDENTIFIED by 123456; -- 将默认的USERS空间分配给用户 alter user root default tablespace users; -- 授权角色以及权限(默认三个角色:connect、resource、dba) grant create session,create ta…

Java数据结构与Java算法学习Day07---优先队列(简略笔记记录)

目录 一、优先队列 106 1.1优先队列的概念 106 1.2最大优先队列API设计 107 1.3最小优先队列 109 1.3.1最小优先队列API设计 110 1.4索引优先队列 (添加两个数组解决该问题)112 1.4.1索引优先队列的原理 112 1.4.2 索引优先队列API设计 113 1…

Spark Windows10 安装

目录一、Scala的安装二、Spark的安装1、Spark的几个版本的意思2、Spark的最新版本:[Spark最新版](https://spark.apache.org/downloads.html)3、安装Spark4、下载winutils在我们安装Spark之前,由于Spark基于Scala的,所以我们需要先安装Scala。…

机床测头应用二:自动补偿功能,提升生产良率

机床测头仿形加工功能可以保证“第一件和第一百件尺寸一致”机床测头应用一:仿形加工功能,降低废品率,此外它的自动补偿功能,也是批量生产中不可缺少的重要质量控制手段。机床测头的自动补偿能实现加工前准确找到工件中心自动更新…

从零开始学习JMETER性能测试

从零开始学习JMETER性能测试 顶级 Jmeter 讲座通过实时示例解释负载测试,包括材料和查询支持 课程英文名:Learn JMETER from Scratch on Live Apps Performance Testing 此视频教程共17.0小时,中英双语字幕,画质清晰无水印&…

实战项目演练丨九哥带你搭建精美的博客后台管理系统!

本项目是一个博客后台管理系统,主要包含四个大模块:用户、分类、博客和评论。项目启动后需要通过管理员身份进入系统,进入系统后会呈现后台管理主界面,通过后左侧的导航菜单,实现不同模块的数据维护。 一. 基本简介 …

美食杰项目(七)菜谱大全

本文目录前言:1.具体样式2.实现的具体功能和代码思路3.element ui具体样式的网址4.相关代码5.总结:前言: 本文给大家讲的是美食杰项目中菜谱大全项目的具体样式,代码思路和具体代码,希望能帮助到你 1.具体样式 2.实现…

Zabbix6.0使用教程 (一)—zabbix新增功能介绍1

使用zabbix的小伙伴应该都有关注到目前zabbix的大版本已经更新到了6.0,后面乐乐将会对如何使用zabbix6.0做一个使用教程的系列,大家可以持续关注,这篇我们主要聊聊zabbix6.0新增的一些功能介绍。 一、Zabbix server 的高可用集群 新版本附带…

Hadoop Windows10 安裝

安裝Hadoop之前,我们先需要安装JDK,JDK的安装我就不多说了 一、安装JDK 1、到Oracle的官网中下载jdk,然后解压到一个指定的文件夹,如:D:\Program Files\Java\jdk-15.0.1 2、配置环境变量:在我的电脑中的高…