自学内容网 自学内容网

双token无感刷新

单token

登录

用户输入账号密码,前端接收传递到后端,后端校验正确后返回一个token到前端,后续读写数据的请求需要在请求头中携带这个token。

当token过期时,会要求用户重新登录。

存在的问题

假设这个token设置为2小时。那么如果这个token泄露了,这个账号将会有2小时处于危险中,直到这个token过期。


双token

需要先明确的是:

1.access_token只用于读写数据,设置时长为1min

2.refresh_token只用于刷新access_token,设置时长为2h


下述案例默认token校验都成功

登录:

用户输入账号密码,前端接收传递到后端,后端校验正确后返回access_token,refresh_token到前端。

查看订单(登录后):

access_token未过期

用户在前端输入相关的参数后,发送查看订单的请求。请求头中只携带access_token,后端校验access_token正确且尚未过期,返回结果给前端。

access_token过期

用户在前端输入相关的参数后,发送查看订单的请求。请求头中只携带access_token,后端校验access_token已经过期,返回状态码401表示access_token过期,且同时返回原始请求为:orders/list。(保存在统一封装结果Result中的code属性和data属性)

前端得知401的状态码,知道是access_token过期了,需要更换。前端发送请求:refresh 到后端,后端校验refresh_token正确且尚未过期,生成一组新的access_token和refresh_token到前端,前端接收并保存。

前端重新发送原始请求:orders/list,并携带新的access_token到后端。后端校验access_token正确且尚未过期,返回结果给前端。

refresh_token过期

用户在前端输入相关的参数后,发送查看订单的请求。请求头中只携带access_token,后端校验access_token已经过期,返回状态码401表示access_token过期,且同时返回原始请求为:orders/list。(保存在统一封装结果Result中的code属性和data属性)

前端得知401的状态码,知道是access_token过期了,需要更换。前端发送请求:refresh 到后端,后端校验refresh_token,发现refresh_token已经过期,则要求用户重新登录。


总结

双token校验解决了单token校验存在的问题,理由如下:

1.假设access_token泄露,那么这个账号处于危险期的时间只有1min,因为1min后,access_token就会刷新

2.假设refresh_token泄露,由于refresh_token只在刷新access_token时才会被使用到,在请求数据时用的是access_token,access_token校验都过不了,就不会有危险。(当然,如果access_token和refresh_token都泄露,那是彻底完蛋了)


原文地址:https://blog.csdn.net/c1tenj2/article/details/142756975

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!