如果token加班,客户端携带refresh_token调用中间件接口获取新的access_token;再次携带客户端refresh_token调用中间件接口获取新的access_token;登录成功,后台jwt生成access_token(jwt有效期为30分钟),缓存至redis(hash-key为access_token,sub-
清华大学毕业证高清生成jwttoken
JWT生成token及过期处理方案。
业务场景
越来越多的项目在前后分离场景中使用token端或端作为接口的安全机制WEB端(使用VUE、REACTJS等结构)使用token为了达到安全的目的,与后端接口交互。
业务场景
越来越多的项目在前后分离场景中使用token端或端作为接口的安全机制WEB端(使用VUE、REACTJS等结构)使用token为了达到安全的目的,与后端接口交互。本文结合stackover以及自己的项目实践,试图总结一个通用的、可实施的方案。
基本思路
用户只登录一次,如果用户更改密码,将被废除token,重新登录
(1)0实现
(1)成功登录,返回access_token和refresh_token,这两种客户端缓存token;
(2)使用access_token要求接口资源,成功调用成功;token加班,客户端携带refresh_token调用中间件接口获取新的access_token;
(3)中间件被刷新token请求后,检查refresh_token是否过期。如果过期,拒绝刷新,客户端在收到状态后跳转到登录页面;如果过期,生成新的access_token和refresh_token回到客户端(如有可能,让旧的refresh_token无效),客户端携带新的access_token重新调用上述资源接口。
(4)客户退出登录或修改密码后,调用中间件取消旧密码token(使access_token和refresh_token故障),同时清空客户端access_token和refresh_toke。
后端表iduser_idclient_idclient_secretrefresh_tokenexpire_increate_date
del_flag
(2)0实现
场景:access_token访问资源refresh_token固定时间X必须重新登录
(1)成功登录,后台jwt生成access_token(jwt30分钟有效期)和refresh_token(jwt有效期为15天),缓存至redis(hash-
key为token,sub-key为手机号,value是设备的唯一号码(根据手机号码,可以手动废除所有号码token,也可以根据sub-
key,废除部分设备token。),设置过期时间为1个月,以确保最终一切token可以删除),返回后,客户端缓存这两种token;
(2)使用access_token要求接口资源成功验证redis中存在该access_token(未废除)调用成功;如果token超时,中间件删除access_token(废除);客户端再次携带;refresh_token调用中间件接口获取新的access_token;
(3)中间件被刷新token的请求后,检查refresh_token是否过期。如果过期,拒绝刷新和删除refresh_token(废除);
客户端收到此状态后,跳转到登录页面;如未过期,检查缓存是否存在refresh_token(是否废除),如果有,就会产生新的access_token并返回给客户端,客户端随后携带新的access_token重新调用上述资源接口。
(4)客户端退出登录或修改密码后,调用中间件注销旧的token(删除中间件access_token和refresh_token(废除)同时清空客户端侧access_token和refresh_toke。
(4)客户退出登录或修改密码后,调用中间件取消旧密码token(删除中间件access_token和refresh_token(废除)同时清空客户端侧access_token和refresh_toke。
(5)如果手机丢失,可以根据手机号手动废除指定用户设备的关联token。
(6)以上3刷新access_token根据登录时间的判断,最长X时间必须重新登录,此时拒绝刷新token。(拒绝场景:无效,长时间未登录,频繁刷新)
(2)0变动
(1)登录
(2)登录拦截器
(3)增加刷新access_token接口
(4)退出登录
(5)修改密码
(3)0实现
场景:长时间未使用的自动续期需要重新登录
(1)成功登录,后台jwt生成access_token(jwt有效期为30分钟),缓存至redis(hash-key为access_token,sub-
key为手机号,value是设备的唯一号码(根据手机号码,可以手动废除所有号码token),设置access_token到期时间为7天,保证最终的一切token可以删除),返回后,客户端缓存此token;
(2)使用access_token要求接口资源成功验证redis中存在该access_token(未废除)调用成功;如果token超时,删除中间件access_token(废除),同时生成新的access_token并返回。客户端收到新的access_token,再次要求接口资源。客户端收到新的access_token,再次要求接口资源。
(3)客户退出登录或修改密码后,调用中间件注销旧密码token(删除中间件access_token(废除)同时清空客户端侧access_token。
(4)以上2可根据登录时间增加最长X时间,此时拒绝刷新token。(拒绝的场景:长时间未登录,频繁刷新)
(5)如果手机丢失,可以根据手机号手动废除指定用户设备的关联token。
(3)0变动
(1)登录
(2)登录拦截器
(3)退出登录
(4)修改密码
(1)3场景:token过期重新登录需要很长时间才能重新登录
(1)成功登录,后台jwt生成access_token(jwt有效期为7天),缓存至redis,key为
"user_id:access_token",value为access_token(根据用户id,指定用户可以人工废除token),设置缓存过期时间为7天,以确保最终一切token可删除,请求返回后,客户端缓存此access_token;
(2)使用access_token要求接口资源成功验证redis中存在该access_token(未废除)则调用成功;如果token超时,删除中间件access_token(废除)同时生成新的access_token并返回。客户端收到新的access_token,再次请求接口资源。客户端收到新的access_token,再次要求接口资源。
(3)客户退出登录或修改密码后,调用中间件注销旧密码token(删除中间件access_token(废除)同时清空客户端侧access_token。
(4)以上2可根据登录时间增加最长X时间,此时拒绝刷新token。(拒绝场景:长时间未登录,刷新频繁)
(5)如果手机丢失,可以根据手机号手动废除指定用户设备的关联token。
(1)3变动
(1)登录
(2)登录拦截器
(3)退出登录
(4)修改密码
(2)0场景:access_token访问资源refresh_token固定时间X必须重新登录
(1)登录成功,后台jwt生成access_token(jwt30分钟有效期)和refresh_token(jwt有效期为15天)
存到redis(hash-key为token,sub-key为手机号,value唯一的设备号码(根据手机号码,可以手动废除
部token,也可以根据sub-key,废除部分设备token。),设置过期时间为1个月,以确保最终一切token都
能删除),返回后,客户端缓存此两种token;
(2)使用access_token要求接口资源成功验证redis中存在该access_token(未废除)调用成功;如果
token超时,中间件删除access_token(废除);客户端再次携带;refresh_token调用中间件接口获取新的
access_token;
(3)中间件被刷新token请求后,检查refresh_token是否过期。
如果过期,拒绝刷新和删除refresh_token(废除);客户端收到此状态后,跳转到登录页;
如未过期,检查缓存是否存在refresh_token(是否废除),如果有,就会产生新的access_token并返回给
客户端,然后客户端携带新的access_token重新调用上述资源接口。
(4)客户退出登录或修改密码后,调用中间件取消旧密码token(删除中间件access_token和refresh_token(
废除),同时清空客户端侧access_token和refresh_toke。
(5)如果手机丢失,可以根据手机号手动废除指定用户设备的关联token。
(5)如果手机丢失,可以根据手机号手动废除指定用户设备的关联token。
(6)以上3刷新access_token根据登录时间的判断,最长X时间必须重新登录,此时拒绝刷新token。(
拒绝场景:无效,长时间未登录,频繁刷新)
(2)0变动
(1)登录
(2)登录拦截器
(3)增加刷新access_token接口
(4)退出登录
(5)修改密码
(3)0场景:自动续期长时间未使用,需重新登录
(1)成功登录,后台jwt生成access_token(jwt有效期为30分钟),缓存至redis(hash-key为
access_token,sub-key为手机号,value是设备的唯一号码(根据手机号码,可以手动废除所有号码token,也可以
根据sub-key,废除部分设备token。),设置access_token到期时间为1个月,以确保最终一切token都能删
除),返回后,客户端缓存此token;
(2)使用access_token要求接口资源,校验成功且redis中存在该access_token(未废除)调用成功;如果
token超时,删除中间件access_token(废除)同时生成新的access_token并返回。客户端收到新的
access_token,
再次要求接口资源。客户端收到新的
access_token,
再次要求接口资源。
(3)客户退出登录或修改密码后,调用中间件注销旧密码token(删除中间件access_token同时清除(废除)
空客户端侧access_token。
(4)以上2可根据登录时间增加最长X时间,此时拒绝刷新token。(拒绝场景:长
时间未登录,刷新频繁)
(5)如手机
丢失,可以根据手机号人工废除指定用户设备关联的token。
{n}
{n}(3)0变动
{n}
{n}(1)登录
{n}
{n}(2)登录拦截器
{n}
{n}(3)退出登录
{n}
{n}(4)修改密码
{n}
{n}(4)0场景:toke
毕业证样本网创作《存档吗?清华大学文凭图片高清 生成jwt token》发布不易,请尊重! 转转请注明出处:https://www.czyyhgd.com/521404.html