Python微信订餐小程序课程视频
https://edu.csdn.net/course/detail/36074
Python实战量化交易理财系统
https://edu.csdn.net/course/detail/35475
系列导航及源代码
需求
在上一篇文章使用.NET 6开发TodoList应用(24)——实现基于JWT的Identity功能中,我们演示了如何使用.NET框架的Identity组件实现基于JWT Token的认证和授权功能。我们可以想象一下场景:当获取到的Token过期以后,我们必须要重新请求认证接口以获取新的Token,在实际的应用中,表现出来就是虽然当前用户一直在进行业务的操作,但是到了一个固定的时间点后,就会要求用户重新登陆一次来获取新Token,这对用户的体验是非常不友好的。所以我们引出了本文将要介绍的Refresh Token的概念。
那么我们为什么一定需要一个Refresh Token而不是将Token的过期时间设置的长一点呢?最主要的原因是如果这个长期的Token一旦被暴露,那么即使我们修改登录密码,也无法阻止已经被暴露的Token被用来访问我们受保护的API资源,只能等到这个Token自己过期。所以我们希望设置一个短时间有效的Token,当客户端Token失效后,服务端将会返回一个Token过期的响应,那么此时客户端就可以携带这个已过期的Token和服务器之前签发的一次性的Refresh Token去服务端换取一个新的Token和一个新的一次性Refresh Token。客户端就可以在不需要重新登陆的情况下携带这个新的Token去访问后端资源,同时也将Token暴露的影响降低了。
目标
为TodoList
实现Refresh Token功能。
原理与思路
为了实现Refresh Token功能,我们需要做这几件事:
- 在用户请求Token时同时创建一个Refresh Token返回给客户端;
- 修改认证服务,使其能够从已过期的Token中获取