Oauth2.0实现token刷新功能

扣扣技术分享交流群:1125844267

1、Oauth2.0简介

Oauth2.0是一个授权协议,提供了一种解决用户资源共享问题的思路,它不是一种实现。对于java来说,我们可以利用Spring Security OAuth2来实现。

Oauth2.0实现的最基本的思路:
这是Oauth2.0实现的最基本的思路
上图的名词解释:
上图的名词解释
几种授权模式:
几种授权模式
授权码模式基本思路:
授权码模式基本思路
微服务架构下的时序图:
微服务架构下的时序图

2、刷新token

(1)基本思路
首先我们要明白,在授权码模式下,在网关请求获取access token的时候,接口会返回一个access token和一个refresh token,我会将这两个值都保存到前端cookies中,每次请求都携带这两个值,网关在验证access token过期后,立马利用refresh token请求接口换去一个新的access token,这个时候接口同样返回两个值,一个access token和refresh token,但是需要注意的是,如果不加特殊配置,refresh token的过期时间的固定不变的。所以,也可能导致用户在使用中突然退出系统,所以,我觉得在刷新access token的时候,同样刷新refresh token也是必要的。
(2)代码实现
在这里插入图片描述
Oauth授权服务配置:

  • 1中的配置就是为了在刷新access token的时候能够将refresh token的过期时间也刷新一下;
  • 3中的配置是内容增强器的配置,在生成的jwt(access token)中添加自定义属性,具体内容增强器的实现自行百度;
  • 2中的配置之前是没有的,在实现刷新token时一直报错,在追踪源码,看了别人的配置后加上这个验证用户名密码的实现就可以了

那么最重要的一个点就是在网关这儿。我们要想实现在用户无感的情况下更新token,那么就不能影响本次的请求的情况下去刷新token。既然每次请求都会走网关,那么每次服务返回的结果肯定也会走网关。那么我们结合Spring Cloud Gateway官网了解一下整个请求的过程。
在这里插入图片描述
我们可以清晰的看到,请求和返回各自有各自的一条路线,并且都会经过一堆过滤器,那么我们就可以在本次请求刷新token成功后,继续本次请求到服务,然后在它返回的过程中将刷新的access token和refresh token加入到返回头中给前端保存
全局过滤器中的实现:
在这里插入图片描述
**注意:**有时候可能配置多了会报一些莫名其妙的错误,我们一定要注意过滤器的顺序问题,可以适当的改变一下顺序可能就没问题了
在这里插入图片描述
前端的部分这里就不再赘述,加拦截器,每个返回的结果检查有没有access token和refresh token,有的话就更新。

其实,在实现之前也百度了很多,但是没有找到刷新token的实现,我这个只是一种思路,如果大家有更好的实现方式,大家可以评论交流!

OAuth2.0配置token的步骤可以通过以下方式实现。首先,你可以使用Spring Security OAuth2来实现。在Java中,可以通过引入Spring Security OAuth2的依赖来使用。然后,需要在你的应用程序配置文件中添加相关的OAuth2.0配置,包括授权服务器的URL、客户端ID和客户端秘钥等信息。通过配置这些信息,你的应用程序可以与授权服务器进行通信,并获取访问令牌。 在使用HttpClient客户端调用Web API接口时,如果API使用OAuth2.0权限控制,你需要在调用接口之前获取访问令牌进行认证。你可以通过向授权服务器发送认证请求来获取访问令牌,这通常涉及到向授权服务器提供你的客户端ID、客户端秘钥、授权类型等信息。一旦获得了访问令牌,你可以将其包含在HTTP请求的头部或参数中,以便API能够验证你的请求并授予访问权限。 另外,在实现OAuth2.0token刷新功能方面,你可以通过编写过滤器来实现。在过滤器中,你可以检查访问令牌的过期时间,并在过期前进行刷新刷新访问令牌的过程,通常涉及向授权服务器发送刷新请求,并提供刷新令牌以获取新的访问令牌。一旦获得了新的访问令牌,你可以更新原有的访问令牌并继续进行API调用。 需要注意的是,具体的OAuth2.0配置和实现方式可能因不同的框架或库而有所差异。因此,你需要根据你所使用的具体工具和技术来查阅相关文档并进行相应的配置和实现。希望以上信息能对你有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Oauth2.0实现token刷新功能](https://blog.csdn.net/qq_41157896/article/details/118697419)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [winform调用webapi获取Token授权案例,webapi使用oauth2.0权限控制](https://download.csdn.net/download/gc101312/82935655)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Oauth2.0实现token刷新功能(二)](https://blog.csdn.net/qq_41157896/article/details/124351822)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Happy-Sir

有收获请打赏,哈哈

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值