【SSO单点登录】JWT续签问题 && OAuth2.0 中的refreshToken刷新机制

oauth2.0授权协议中刷新令牌refresh token的工作原理及生命周期分析 在学习oauth2.0协议的时候,对于刷新令牌refresh token感觉很困惑。主要是为啥需要刷新令牌,以及刷新令牌是如何工作的,技术细节是啥?比如通过refresh token可以让access token永久不过期吗? 下面就针对这两个问题进行分析。 为什么需要刷新令牌 如果access token超时时间很长,比如14条,由于第三方软件获取受保护资源都要带着access token,这样access token的攻击面就比较大。 如果access token超时时间很短,比如1个小时,那其超时之后 阅读详情

本篇速览

  • JWT续签问题
    • 快过期时返回新的token

    • refreshToken

      • 如何判断refreshToken的有效性

      • 扩展 -- OAuth2.0 中的refreshToken刷新机制

    • 其他需要刷新token的情况

      • 用户修改了角色权限
      • 删除了某个身份角色

为什么需要续签

如果给JWT设定了一个有效时间的话,时间到JWT是会过期的。但假如这个时候用户正在提交重要信息,填了一大堆信息,按下按钮时,后台拦截器发现token过期,告知前端,前端直接退回登录页,那这次提交就相当于无效了,还得登录后重新填一遍【当然前端也能做缓存,这里就不考虑那么多了,只是个栗子】

而原始JWT设计下,是没有考虑续签问题的。所以续签(即延长JWT的过期时间)工作需要我们自己来做。

快过期了返回新的token

类似于 Session 认证中的做法: 假设服务端给的 token 有效期设置为30分钟,服务端每次进行校验时,如果发现 token 的有效期马上快过期了, 服务端就重新生成 token 给客户端。

客户端每次请求都检查新旧token,如果不一致,则更新客户端存储的token。

  • 这种做法的问题是仅仅在快过期的时候请求才会更新 token ,对客户端不是很友好。

refreshToken刷新机制

流程图

用户登录返回两个 token :第一个是 acessToken ,它的过期时间比较短,比如是1天;另外一个是 refreshToken 它的过期时间更长一点,可以是accessToken的2倍:2天。

客户端登录后,将 accessToken和refreshToken 保存在客户端本地,每次访问将 accessToken 传给服务端。服务端校验 accessToken 的有效性,

如果过期的话,就将 refreshToken 传给服务端。如果 refreshToken 有效,服务端就生成新的 accessToken 给客户端。否则,客户端就重新登录即可。

🎆如何判断refreshToken的有效性

将生成的 Refresh Token 以及过期时间存储在服务端的数据库中,由于 Refresh Token 不会在客户端请求业务接口时验证,只有在申请新的 Access Token 时才会验证,所以将 Refresh Token 存储在数据库中,不会对业务接口的响应时间造成影响,也不需要像 Session 一样一直保持在内存中以应对大量的请求。

当然,更安全的方式是,客户端需要绑定一个client_id和secret,服务端会验证这个refreshToken是否是改客户端发起的,防止被盗用【这个是后话了,我们后续基于token的SSO单点登录,验证令牌ticket的时候还会着重讲解】

缺点

  • 重新请求获取 token 的过程中会有短暂 token 不可用的情况(可以通过在客户端设置定时器,当accessToken 快过期的时候,提前去通过 refreshToken 获取新的accessToken)。

扩展 -- OAuth2.0中的刷新机制

客户端在获得access token的同时也会在响应信息中得到一个名为expires_in的数据,它表示当前获得的access token会在多少秒以后过期。 当超过该指定的秒数后,access token便会过期。当access token过期后,如果客户端依然用它访问服务,服务端就会返回invalid_token的错误或401错误码。

HTTP/1.1 401 Unauthorized
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache

{
    "error": "invaild_token"
}

如果用户访问的时候,客户端的"访问令牌AccessToken"已经过期,则需要使用"更新令牌refreshToken"申请一个新的访问令牌。

客户端发出更新令牌的HTTP请求,包含以下参数:

  • granttype:表示使用的授权模式,此处的值固定为"refreshtoken",必选项。
  • refresh_token:表示早前收到的更新令牌,必选项。
  • scope:表示申请的授权范围,不可以超出上一次申请的范围,如果省略该参数,则表示与上一次一致。
POST /v1/oauth2/token HTTP/1.1
Host: melo.com
Authorization: Bearer zskldjflsdjflksjdflkjsd
Content-Type: application/x-www-form-urlencoded

grent_type=refresh_token&refresh_tokne=ajsldkjflskdfjldfg

其他需要刷新token的情况

用户修改了角色的权限

由于权限是在登录的时候,绑定在token里边了,若登录后,管理员修改了角色的权限,而服务端此时还拿一开始登录的token去获取权限的话,就会出现不同步,所以需要主动刷新token更新权限

删除了某个身份角色

情况跟上边是类似的,本质上也是身份权限发生了变更,只要是token中的信息,发生了变化,而我们之后还要用到,会出现数据不一致的情况,就需要刷新token

 

【google auth2】如何持久化获取refreshToken(刷新令牌) 当 Access Token 失效时,应该使用 Refresh Token 来向 Google 申请新的 Access Token。在进行 Google OAuth2 认证时,需要向 Google 发起授权请求,并带上一些参数,例如。,以便获取 Refresh Token。在进行 OAuth2 认证流程时,,需要在授权请求中添加。 阅读详情

相关推荐

oauth2.0 注销登录再次访问authorize授权接口会跳过登录页面问题解决

子系统前后端分离时,退出并不能正确的清除SSO的login的用户信息,因为它是存在服务器上的,前端无法清除,用后端清除但因为是前后端分离,注销并不能正确携带request给服务器来清空用户登录信息,所以会出现,注销登录再次访问authorize授权接口会默认使用cookie导致登录成功跳过登录页面 解决方案:做AOP切入authorize接口,在使用authorize获取code之前,做一次清除用户信息的操作,使得每次获取code都是未登录状态,避免跳过登录页面 代码直接粘就完了!!! import c

it佳佳的博客 3186

JWT续期问题,ChatGPT解决方案

如果令牌有效,方法将使用getUserIdFromRefreshToken方法获取与令牌关联的用户信息,然后使用generateAccessToken方法生成一个新的JWT访问令牌,并将其返回。如果令牌无效,则抛出异常。无状态JWT不需要在服务端存储任何状态信息,因此可以避免因为更新JWT访问令牌而导致后续请求使用旧的JWT访问令牌的问题。在每个请求处理程序中使用同步机制(例如,Java的synchronized关键字),以确保在更新JWT访问令牌期间没有其他请求正在使用旧的JWT访问令牌。

weixin_64051447的博客 1962

JWT在单点登录中的完整实现:从原理到生产环境实践

单点登录(SSO)是现代分布式系统中的核心认证机制,它通过统一的认证中心解决多系统间的用户状态同步问题。其原理基于令牌传递机制,允许用户一次登录即可访问所有信任的应用系统。JWT(JSON Web Token)作为无状态、自包含的令牌标准,在SSO架构中展现出显著的技术价值:它将用户信息编码到Token中,服务端无需存储会话状态,完美契合微服务架构的需求。在实际应用场景中,JWT通过Header、Payload、Signature三部分结构确保数据完整性和安全性,结合Redis实现Token黑名单管理,有效

weixin_33994429的博客 404

【SSO单点登录07】JWT续签问题

在服务器端可以校验即将过期的token,比如将token存在于redis中,可以用token的TTL去获取token的过期时间,如果时间比较短,就可以顺便返回一个新的token,这种方式对于前后端都不友好,客户端和服务端都需要去判断逻辑,会带来很大的性能损耗。这种场景比较适用于小程序,可以在用户每次进入小程序时就去返回一个新的token,只要token的有效时间合适,是一个不错的选择方案,但在单点登录的web端,这种方式不太合适,毕竟web端不像小程序端可以直接返回用户的一些用户标识。

m0_63546281的博客 979

JWT单点登录(SSO)实现原理与安全实践指南

JSON Web Token(JWT)作为一种开放标准,通过数字签名实现安全的信息传输机制。其核心原理基于Header、Payload、Signature三部分结构,采用Base64编码和签名算法确保数据完整性和身份验证。在分布式系统架构中,JWT的无状态特性解决了传统Session方案的状态同步难题,特别适用于微服务架构下的身份认证需求。通过单点登录(SSO)场景,JWT可作为统一令牌实现跨系统身份传递,用户一次登录即可访问多个关联应用。实际工程实践中,需重点关注Token有效期管理、签名密钥安全、注销机

weixin_30333885的博客 422

Web身份认证全解析:从Session、JWT到SSO与安全实践

Web身份认证是解决HTTP无状态协议下用户身份识别问题的核心技术。其核心原理是通过凭证(如Session ID或Token)在客户端与服务器之间建立信任关系,使服务器能够识别请求的发起者。这项技术的价值在于保障用户数据安全、实现跨系统状态管理,并作为防御CSRF、XSS等攻击的基础防线。从经典的Session-Cookie机制到现代无状态的JWT(JSON Web Token),再到实现“一次登录,全网通行”的单点登录(SSO),认证方案随着前后端分离、微服务等架构演进不断升级。在实际应用中,开发者常需结

cmff98425的博客 416

JWT refreshtoken 实践

Json web token (JWT), 根据官网的定义,是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直...

weixin_34209406的博客 2661

前端JWT单点登录(SSO)实战:从原理到安全架构设计

单点登录(SSO)是现代Web应用架构中解决用户身份统一认证的核心技术,其核心原理是通过一次登录,实现用户在多个关联应用间的无缝访问。JWT(JSON Web Token)作为一种无状态、自包含的令牌标准,因其易于跨域传递和验证的特性,成为实现轻量级SSO的热门技术方案。在工程实践中,前端作为用户交互的直接入口,承担着令牌管理、安全存储和流程调度的关键职责。一个稳健的前端SSO架构需要综合考量令牌存储安全(如防范XSS攻击)、跨域认证流程、自动续期机制以及多标签页状态同步等核心问题。本文聚焦于前端视角,深入

weixin_30216561的博客 405

TensorFlow Web门户集成OAuth2.0单点登录:Spring Security实战指南

单点登录是现代企业应用集成的核心需求,旨在解决多系统间用户身份认证分散、体验割裂的痛点。其核心原理是通过一个中央认证服务统一管理用户身份,其他应用通过标准协议(如OAuth 2.0)进行委托认证,从而实现“一次登录,处处访问”。OAuth 2.0授权码模式因其高安全性,成为Web服务器应用实现SSO的行业标准技术方案,它通过授权码在客户端后端与授权服务器间安全交换令牌,有效避免了令牌在前端暴露的风险。在机器学习平台和内部工具链场景中,该技术能统一TensorFlow等AI服务门户的访问入口,简化用户操作,并

weixin_30402343的博客 448

Cookie、Session、Token、JWT与OAuth2:Web认证授权核心概念全解析

在Web开发中,认证与授权是保障应用安全的核心机制。其基本原理是解决HTTP无状态协议下的用户身份识别与权限管理问题。从技术实现上看,经典的Cookie-Session机制通过在客户端存储标识、服务端维护会话状态来实现有状态认证;而基于Token的无状态认证,则将用户信息编码在令牌中,由客户端存储并在请求时携带,服务器通过验证签名即可识别身份,这显著提升了分布式系统的扩展性。JWT作为Token的一种流行标准,采用结构化格式(Header.Payload.Signature)实现信息自包含与防篡改,广泛应用

cunfuteng7334的博客 431

一文精通JWT Token、ID Token、Access Token、Refresh Token

用于授权访问资源,任何 Bearer 持有者都可以无差别地用它来访问相关的资源,而无需证明持有加密 key。一个 Bearer 代表授权范围、有效期,以及其他授权事项;一个 Bearer 在存储和传输过程中应当防止泄露,需实现 Transport Layer Security (TLS);一个 Bearer 有效期不能过长,过期后可用 Refresh Token 申请更新。

FeelTouch Labs 3622

OAuth2.0实现单点登录的原理流程,这次总该懂了!

单点登录(Single Sign-On,简称SSO)是现代企业应用和互联网服务中非常普遍的需求。它允许用户使用一组凭据(例如用户名和密码)登录一次,即可访问多个相互信任的应用系统。对于用户而言,无需记住多个密码,也不需要反复登录;对于开发者而言,可以统一认证和授权,简化用户管理。OAuth 2.0是业界标准的授权协议,但很多人对如何利用它来实现SSO感到困惑。有人说OAuth 2.0是授权协议,不是认证协议,不能直接用于SSO;又有人说用OAuth 2.0加上一些扩展就能实现SSO。到底是怎么回事?

油墨香^-^的博客 528

大白话说Spring全家桶-24-OAuth2资源服务器

本文详解OAuth2协议核心原理与Spring Security 6.x生产级实现,拆解OAuth2四大角色、4种授权模式(授权码/客户端/密码/简化)的优劣与适用场景,提供Spring Authorization Server授权服务器、资源服务器、OAuth2客户端、SSO单点登录、GitHub/微信第三方登录的完整可运行生产级代码,深入剖析客户端数据库持久化、与现有自定义JWT认证整合的实现方案,梳理6大类高频避坑指南(JWT对称密钥、redirect_uri未校验、scope过大、token永不过期

Java后端 | AI智能体应用实战派 | 电脑技能行家 150

JWT单点登录实战:从原理到企业级安全认证方案

单点登录(SSO)作为现代分布式系统的核心认证架构,通过集中认证、分布式授权的模式解决了多系统间的统一登录问题。其技术原理基于令牌机制,JWT(JSON Web Token)凭借自包含、可验证、无状态的特性成为SSO的理想选择。在技术价值层面,JWT单点登录显著提升了系统安全性和用户体验,同时降低了服务端存储压力。典型应用场景包括微服务架构统一认证、多子系统平台集成等企业级应用。本文聚焦JWT在真实单点登录系统中的认证流程设计,涵盖Token安全性、权限动态更新等关键技术挑战,提供基于Spring Boot

congji3817的博客 413

C#单点登录SSO从原理到实战:JWT令牌与认证中心设计指南

在企业级应用中,多系统账号独立管理往往带来重复登录和密码管理难题,尤其在C#技术栈的工业内网环境中尤为突出。单点登录(SSO)通过统一认证中心,实现一次登录、全网通行,其核心在于认证凭证的设计与校验机制。JWT(JSON Web Token)作为一种无状态令牌方案,凭借跨域支持和轻量校验特性,成为现代SSO实现的首选载体。本文从SSO原理出发,对比IdentityServer4与自建认证中心的适用场景,深入讲解Token颁发、验证中间件、登录态同步、刷新机制及跨域Cookie等关键环节,并结合实际踩坑经历给

weixin_33416697的博客 232

MATLAB App Designer 实现多窗口交互与数据传递实战

本文详细介绍了如何使用MATLAB App Designer实现多窗口交互与数据传递的实战技巧。从基础的多窗口应用设计到高级的动态窗口创建,涵盖了窗口调用控制、数据传递方法、状态管理及用户体验优化等核心内容,帮助开发者高效构建复杂的MATLAB GUI应用。

milk5的博客 667

API认证授权全解析:从API Key、JWT到OAuth 2.0的实战选型指南

在构建现代API时,认证与授权是保障系统安全的核心机制。认证解决“你是谁”的问题,确保访问者身份真实;授权则处理“你能做什么”,控制资源访问权限。其技术原理从简单的静态密钥验证,发展到基于声明的无状态令牌,再到复杂的授权委托框架。这些技术为分布式系统提供了身份验证、权限管理和安全协作的基础能力,广泛应用于微服务通信、单点登录和开放平台集成等场景。本文聚焦于API Key、JWT和OAuth 2.0三大主流方案,通过对比其核心思想、安全模型与适用场景,帮助开发者在面对机器对机器通信、用户认证及第三方授权等不同

weixin_34090562的博客 657

量化爬虫实战:手把手教你搞定同花顺问财的hexin-v参数(附JS逆向思路与Cookie Hook技巧)

本文详细解析了如何通过JS逆向技术获取同花顺问财平台的`hexin-v`参数,包括Cookie Hook技巧和完整解决方案架构。从环境搭建到参数定位,再到生成逻辑逆向,手把手教你突破数据获取限制,为量化交易提供可靠数据支持。

weixin_42557803的博客 399

认证服务MCP Server:SSO与OAuth集成

标签: MCP, 认证服务, SSO, OAuth, MCP Server上周团队里有个新来的同学问我,他做的 AI 助手需要访问公司内部的好几个系统,HR 系统、财务系统、代码仓库,每个系统都要单独登录。用户跟 AI 说"帮我请个年假",AI 就得先有 HR 系统的登录凭证才能操作。他说能不能让用户在 AI 助手里输入一次密码,然后 AI 就能访问所有系统。我说你这不就是 SSO(单点登录)要解决的问题吗。但你别在 AI 助手里让用户输密码,太不安全了。

白话机器学习 421

PCB数据集

整理了一部分PCB数据集

m0_57996537的博客 3867

BUCK电路三种工作模式全解析:CCM、BCM、DCM到底怎么选?

本文深入解析BUCK电路的CCM、DCM和BCM三种工作模式,通过对比其电流波形、效率、纹波及环路特性,提供基于计算公式的量化判断方法。文章结合电池供电、高精度模拟等具体应用场景,给出明确的模式选型策略与实战设计指南,帮助工程师根据核心需求做出最优决策。

ee345的博客 491

JWT单点登录认证流程详解与Spring Boot实战

单点登录(SSO)是分布式系统中解决多应用统一认证的核心技术,其原理是通过中心认证服务生成安全令牌,实现用户一次登录、全网通行的技术价值。JWT(JSON Web Token)作为无状态认证的标准方案,采用Header、Payload、Signature三段式结构,通过数字签名确保令牌的完整性和可信性。在微服务架构中,JWT的轻量级和自包含特性使其成为SSO实现的优选方案,能够有效支持跨域认证和系统水平扩展。本文基于Spring Boot框架,通过JWT工具类、认证过滤器和安全配置等核心组件,详细演示单点登

weixin_34111790的博客 410

Figma入门-自动布局

Figma原型图制作内置组件友好,自动布局类似CSS flex,通过布局网格控制对齐、分布、换行等,前端熟悉的同学易上手,参数设置基本一致。

我码玄黄的博客 2175
上一篇: 【Java】如何在Intellij IDEA 中集成 GitHub ?
下一篇: 行为型设计模式之解释器模式
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值