【视频+源码】登录鉴权的三种方式:token、jwt、session实战分享
创始人
2024-03-24 05:44:49
0

前言

因为我既对接过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

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

一起学习

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

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

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

相关内容

热门资讯

【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
【前端】‘??‘与‘||‘有什... 0 问题 经常写const data = res.data.a ?? ''或者const d...
ChatGPT 怎么用最新详细... ChatGPT 以其强大的信息整合和对话能力惊艳了全球,在自然语言处理上面表现出了惊人...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...