广告
返回顶部
首页 > 资讯 > 精选 >gtoken替换jwt如何实现sso登录
  • 364
分享到

gtoken替换jwt如何实现sso登录

2023-06-30 16:06:33 364人浏览 泡泡鱼
摘要

这篇“gtoken替换Jwt如何实现sso登录”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“gtoken替换jwt如何实现s

这篇“gtoken替换Jwt如何实现sso登录”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“gtoken替换jwt如何实现sso登录”文章吧。

jwt的问题

首先说明一个jwt存在的问题,也就是要替换jwt的原因:

  • jwt无法在服务端主动退出的问题

  • jwt无法作废已颁布的令牌,只能等到令牌过期问题

  • jwt携带大量用户扩展信息导致降低传输效率问题

jwt的请求流程图

gtoken替换jwt如何实现sso登录

gtoken的优势

gtoken的请求流程和jwt的基本一致。

gtoken的优势就是能帮助我们解决jwt的问题,另外还提供好用的特性,比如:

  1. gtoken支撑单点应用测试使用内存存储,支持个人项目文件存储,也支持企业集群使用redis存储;完全适用于企业生产级使用;

  2. 有效的避免了jwt服务端无法退出问题;

  3. 解决jwt无法作废已颁布的令牌,只能等到令牌过期问题;

  4. 通过用户扩展信息存储在服务端,有效规避了jwt携带大量用户扩展信息导致降低传输效率问题;

  5. 有效避免jwt需要客户端实现续签功能,增加客户端复杂度;支持服务端自动续期,客户端不需要关心续签逻辑;

注意问题

  • 支持服务端缓存自动续期功能,不需要通过refresh_token刷新token,简化了客户端的操作

  • 版本问题千万注意:在gtoken v1.5.0全面适配GoFrame v2.0.0 ; GoFrame v1.X.X 请使用GfToken v1.4.X相关版本

TIPS:下面我的演示demo和源码阅读都是基于v1.4.x版本的。

演示demo

下面的演示demo可以复制到本地main.go文件中执行,更新依赖的时候千万注意版本。

重点说一下踩的坑:

Login方法会要求我们返回两个值:

第一个值对应userKey,后续我们可以根据userKey获得token 第二个值对应data,是interface{}类型,我们可以在这里定义例如userid、username等数据。

先有这个概念即可,后面会带大家读源码

package mainimport (   "GitHub.com/goflyfox/gtoken/gtoken"   "github.com/gogf/gf/frame/g"   "github.com/gogf/gf/net/gHttp"   "github.com/gogf/gf/os/glog")var TestServerName string//var TestServerName string = "gtoken"func main() {   glog.Info("########service start...")   g.Cfg().SetPath("example/sample")   s := g.Server(TestServerName)   initRouter(s)   glog.Info("########service finish.")   s.Run()}var gfToken *gtoken.GfTokenfunc initRouter(s *ghttp.Server) {   // 不认证接口   s.Group("/", func(group *ghttp.RouterGroup) {      group.Middleware(CORS)      // 调试路由      group.ALL("/hello", func(r *ghttp.Request) {         r.Response.WriteJSON(gtoken.Succ("hello"))      })   })   // 认证接口   loginFunc := Login   // 启动gtoken   gfToken := &gtoken.GfToken{      ServerName:       TestServerName,      LoginPath:        "/login",      LoginBeforeFunc:  loginFunc,      LogoutPath:       "/user/logout",      AuthExcludePaths: g.SliceStr{"/user/info", "/system/user/info"}, // 不拦截路径 /user/info,/system/user/info,/system/user,      MultiLogin:       g.Config().GetBool("gToken.MultiLogin"),   }   s.Group("/", func(group *ghttp.RouterGroup) {      group.Middleware(CORS)      gfToken.Middleware(group)      group.ALL("/system/user", func(r *ghttp.Request) {         r.Response.Writejson(gtoken.Succ("system user"))      })      group.ALL("/user/data", func(r *ghttp.Request) {         r.Response.WriteJson(gfToken.GetTokenData(r))      })      group.ALL("/user/info", func(r *ghttp.Request) {         r.Response.WriteJson(gtoken.Succ("user info"))      })      group.ALL("/system/user/info", func(r *ghttp.Request) {         r.Response.WriteJson(gtoken.Succ("system user info"))      })   })   // 启动gtoken   gfAdminToken := &gtoken.GfToken{      ServerName: TestServerName,      //Timeout:         10 * 1000,      LoginPath:        "/login",      LoginBeforeFunc:  loginFunc,      LogoutPath:       "/user/logout",      AuthExcludePaths: g.SliceStr{"/admin/user/info", "/admin/system/user/info"}, // 不拦截路径 /user/info,/system/user/info,/system/user,      MultiLogin:       g.Config().GetBool("gToken.MultiLogin"),   }   s.Group("/admin", func(group *ghttp.RouterGroup) {      group.Middleware(CORS)      gfAdminToken.Middleware(group)      group.ALL("/system/user", func(r *ghttp.Request) {         r.Response.WriteJson(gtoken.Succ("system user"))      })      group.ALL("/user/info", func(r *ghttp.Request) {         r.Response.WriteJson(gtoken.Succ("user info"))      })      group.ALL("/system/user/info", func(r *ghttp.Request) {         r.Response.WriteJson(gtoken.Succ("system user info"))      })   })}func Login(r *ghttp.Request) (string, interface{}) {   username := r.GetString("username")   passwd := r.GetString("passwd")   if username == "" || passwd == "" {      r.Response.WriteJson(gtoken.Fail("账号或密码错误."))      r.ExitAll()   }   return username, "1"   }// 跨域func CORS(r *ghttp.Request) {   r.Response.CORSDefault()   r.Middleware.Next()}

启动项目:

gtoken替换jwt如何实现sso登录

访问不认证接口:返回成功

gtoken替换jwt如何实现sso登录

未登录时访问认证接口:返回错误

gtoken替换jwt如何实现sso登录

请求登录接口:返回token

gtoken替换jwt如何实现sso登录

携带token再次访问认证接口:返回成功

gtoken替换jwt如何实现sso登录

以上就是关于“gtoken替换jwt如何实现sso登录”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: gtoken替换jwt如何实现sso登录

本文链接: https://www.lsjlt.com/news/330299.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • gtoken如何替换jwt实现sso登录
    今天小编给大家分享一下gtoken如何替换jwt实现sso登录的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。gtoken服务...
    99+
    2023-07-02
  • gtoken替换jwt如何实现sso登录
    这篇“gtoken替换jwt如何实现sso登录”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“gtoken替换jwt如何实现s...
    99+
    2023-06-30
  • 源码解析gtoken替换jwt实现sso登录
    目录jwt的问题jwt的请求流程图gtoken的优势注意问题演示demo分析源码刷新tokenGfToken结构体思考题总结jwt的问题 首先说明一个jwt存在的问题,也就是要替换j...
    99+
    2022-11-13
  • gtoken替换jwt实现sso登录的排雷避坑
    目录前言gtokengtoken替换jwt解决的问题兼容JWTgtoken实现原理踩坑之旅1 gtoken版本2 gtoken存储问题3 不能跨环境使用token4 测试账号不规范问...
    99+
    2022-11-13
  • gtoken替换jwt实现sso登录的问题小结
    目录jwt的问题jwt的请求流程图gtoken的优势注意问题演示demo今天和大家分享一下使用gtoken替换jwt实现sso登录的经验,为了让大家更好的理解会带大家读一下重点的源码...
    99+
    2022-11-13
  • php如何实现SSO登录
    本文操作环境:Windows7系统、PHP7.1版、Dell G3电脑。php如何实现SSO登录SSO单点登录设计及PHP实现建议先熟悉单点登录SSO相关概念。 SSO:单点登录,一次登录,所有相关系统均可以进入,无需重复登录实现方案:共享...
    99+
    2019-04-16
    php SSO
  • SpringBoot如何实现同域SSO(单点登录)
    目录如何实现同域SSO?代码实现依赖配置控制器拦截器实现界面单点登录,其实看起来不是很复杂,只是细节上的处理,单点区分有三种 同域SSO 同父域SSO ...
    99+
    2022-11-12
  • 如何使用JWT实现单点登录
    本篇内容介绍了“如何使用JWT实现单点登录”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、故事起源说起 ...
    99+
    2022-10-19
  • Java SpringSecurity+JWT如何实现登录认证
    这篇文章主要介绍了Java SpringSecurity+JWT如何实现登录认证的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java SpringSecurity+JWT如何实现登录认证文...
    99+
    2023-07-02
  • PHP如何实现JWT的Token登录认证
    本篇内容介绍了“PHP如何实现JWT的Token登录认证”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、JWT简介JSON Web Tok...
    99+
    2023-06-21
  • 如何实现Spring+ Spring cloud + SSO单点登录应用认证
    今天就跟大家聊聊有关如何实现Spring+ Spring cloud + SSO单点登录应用认证,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。不同系统的无缝隙集成,统一的sso单点登...
    99+
    2023-06-05
  • 如何使用PHP实现高效稳定的SSO单点登录
    引言:随着互联网应用的普及,用户面临着大量的注册和登录过程。为了提高用户体验,并减少用户的注册和登录间隔,许多网站和应用开始采用单点登录(Single Sign-On,简称SSO)技术。本文将介绍如何使用PHP实现高效稳定的SSO单点登录,...
    99+
    2023-10-21
    PHP SSO 单点登录
  • 如何实现dos批量替换当前目录后缀名
    这篇文章主要介绍如何实现dos批量替换当前目录后缀名,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!有时候有些后缀名不满足条件,就需要进行批量的替换,如果人为的去替换,那么如果量少的话还好说,量多的话一个个去替换就太傻...
    99+
    2023-06-08
  • php中sprintf如何实现替换
    小编给大家分享一下php中sprintf如何实现替换,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php sprintf实现替换的方法:1、创建一个PHP示例文件...
    99+
    2023-06-22
  • jquery如何实现正则替换
    这篇文章主要介绍“jquery如何实现正则替换”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“jquery如何实现正则替换”文章能帮助大家解决问题。 ...
    99+
    2022-10-19
  • javascript如何实现正则替换
    本篇内容主要讲解“javascript如何实现正则替换”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript如何实现正则替换”吧! ...
    99+
    2022-10-19
  • dedecms如何实现批量替换
    这篇文章主要讲解了“dedecms如何实现批量替换”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“dedecms如何实现批量替换”吧! ...
    99+
    2023-02-24
    dedecms
  • JavaScript如何实现替换所有
    这篇文章给大家分享的是有关JavaScript如何实现替换所有的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。替换所有String.replace()函数允许你使用字符串或正则表达式来替换字符串,本身这个函数只替换...
    99+
    2023-06-27
  • PHP如何实现局部替换
    这篇文章给大家分享的是有关PHP如何实现局部替换的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环境。二、WampServer,WampS...
    99+
    2023-06-14
  • JavaScript如何实现全部替换
    这篇文章将为大家详细讲解有关JavaScript如何实现全部替换,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。全部替换我们知道 string.replace() 函数仅替换第一次出现的情况。你可以通过在正...
    99+
    2023-06-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作