Go 项目开发实战-用户Token的刷新、踢人下线和防盗检测

开发 前端
即然有效期短那就得有合理的方式让用户的Token能够被刷新,不然用户使用产品期间隔一段时间就得登录一次,一天登录好几次,用户体验可想而知,定是不会好的。

这节我们继续讲Token的刷新和主动踢人下线。

图片图片

首先Token为啥刷新呢?很简单为了安全性用户AccessToken的时效性会相对较短,保证Token被其他恶意用户拿到后也不能长时间用它来浏览用户的数据。

即然有效期短那就得有合理的方式让用户的Token能够被刷新,不然用户使用产品期间隔一段时间就得登录一次,一天登录好几次,用户体验可想而知,定是不会好的。

为什么要有刷新Token

在我们的用户认证体系中,当用户登录成功后,在服务端存储以下的Token信息和用户会话信息。

图片图片

这里我们设计了两种Token:AccessToken以及RefreshToken,AccessToken专门用户来接口请求中验证请求的用户身份,我们上面说过为了安全考虑它的时效比较短一般 0.5h ~ 2h,到期后客户端可以用RefreshToken来刷新获得新的Token信息。

RefreshToken的时效一般设的较长10 ~ 30天都可以,假设用户首次登录后过了几天再来使用应用,客户端仍能通过RefreshToken来刷新Token信息,用户在短期未使用产品的情况下仍能保持住登录态,不至于出现隔几天再用每次都得重新登录的情况。

所以两个Token,AccessToken 时效短,RefreshToken 时效长,两者结合,在安全性和用户体验上都有一定保证。

在上节用户 Token 的派发、存储和认证开发的功能中,项目的用户登录系统时,服务端存储了上述Token和会话信息后会向客户端下发以下图示中的Token字段。

图片图片

除了上面这张用户登录的情况,当客户端进行Token信息的刷新时,这些Token字段也会更新并返回给客户端,也就是说刷新Token信息后除了AccessToken会更新外,RefreshToken也会刷新,用户登录态的可保持时间又往后延长了一个新的周期。与此同时旧的RefreshToken我们并不会直接删,而是设置延迟几个小时删除,为什么这么做呢?后面告诉你答案。我们先看一下Token刷新逻辑的实现。

Token刷新逻辑实现

我用下面这个顺序图说明了整个Token刷新的逻辑。

图片图片

大家把这张图中描述的Token刷新逻辑好好地看一下,通过这张图可以看出来,刷新逻辑与生成逻辑只有两处不一样:

总结

本节的代码版本号为c11,加入项目后访问 https://github.com/go-study-lab/go-mall/compare/c10...c11 能看本章节的详细代码。

图片

Token的主要逻辑到这里就开发完成了,接下来我们把它接入到用户登录的流程中去,另外现在的Token体系还不够完善,因为对于用户登出、重置密码等需要主动过期Token和清除Session的逻辑我们还没有覆盖到,这些我们会在接下来的几节中开发相应的功能时再去完善。

责任编辑:武晓燕 来源: 网管叨bi叨
相关推荐

2025-01-02 09:02:09

Go项目Token

2025-01-15 09:21:01

2024-12-30 09:12:17

2011-03-30 20:52:03

无流量用户上网行为管理网康科技

2024-09-02 10:46:57

2024-07-11 10:38:02

2023-03-14 08:01:53

Go开发原子操作

2024-04-17 12:59:18

前端Token开发

2024-11-13 09:13:45

2022-03-13 23:51:39

Web项目Go

2022-01-27 08:27:23

Dubbo上下线设计

2022-09-28 12:39:46

axios拦截器

2024-01-12 18:26:44

2024-12-05 09:13:55

Go项目模块

2019-01-14 15:44:11

CoinToken区块链

2024-12-05 08:58:47

2013-12-09 16:31:58

2023-12-31 16:44:30

2021-06-08 10:41:00

Go语言算法

2023-10-07 09:00:00

人脸检测Web应用程序
点赞
收藏

51CTO技术栈公众号