当前位置: 首页 > wzjs >正文

东莞厚街职业技术学校百度seo排名360

东莞厚街职业技术学校,百度seo排名360,帮别人做网站被抓,网站维护电话Token自动续期实现方案详解 Token自动续期是提升用户体验和保障系统安全的关键机制,其核心在于无感刷新和安全可控。以下从原理、实现方案、安全措施和最佳实践四个维度展开说明: 一、核心原理:双Token机制 Token自动续期通常采用 Access …

Token自动续期实现方案详解

Token自动续期是提升用户体验和保障系统安全的关键机制,其核心在于无感刷新和安全可控。以下从原理、实现方案、安全措施和最佳实践四个维度展开说明:

一、核心原理:双Token机制

Token自动续期通常采用 Access Token(访问令牌) + Refresh Token(刷新令牌) 的双Token方案:

  • Access Token:短期有效(如15分钟),用于直接访问受保护资源。
  • Refresh Token:长期有效(如30天),仅用于获取新的Access Token。

当用户请求资源时,服务端验证Access Token有效性:

  1. 有效:直接响应请求。
  2. 过期:客户端使用Refresh Token申请新Access Token,无需用户重新登录。

二、实现方案详解

1. 后端实现流程

(1)登录时生成双Token

// 生成Access Token(15分钟有效期)
String accessToken = JwtUtil.sign(username, secret, 15 * 60 * 1000);
// 生成Refresh Token(30天有效期)
String refreshToken = JwtUtil.sign(username, secret, 30 * 24 * 60 * 60 * 1000);
// 存储到Redis(Access Token过期时间设为双倍,用于续期判断)
redisUtil.set("access_token:" + userId, accessToken, 30 * 60); // 30分钟
redisUtil.set("refresh_token:" + userId, refreshToken, 30 * 24 * 60 * 60); // 30天


(2)请求拦截校验与续期

public boolean preHandle(HttpServletRequest request) {String token = request.getHeader("Authorization");// 1. 检查Access Token是否存在if (token == null) return false;// 2. 验证Token有效性try {JwtUtil.verify(token, secret);} catch (TokenExpiredException e) {// 3. Token过期但仍在Redis中,触发续期String cachedToken = redisUtil.get("access_token:" + userId);if (cachedToken != null && cachedToken.equals(token)) {String newToken = JwtUtil.sign(username, secret, 15 * 60 * 1000);redisUtil.set("access_token:" + userId, newToken, 30 * 60);request.setAttribute("new_token", newToken); // 返回新Token给前端} else {// Redis中Token已失效,需重新登录return false;}}return true;
}

2. 前端实现流程

(1)请求拦截器逻辑

axios.interceptors.response.use(response => {// 检查Token是否即将过期(例如剩余1分钟)const token = localStorage.getItem('access_token');const decoded = jwtDecode(token);const expireTime = decoded.exp * 1000;const now = Date.now();if (expireTime - now < 60 * 1000) {// 自动调用刷新接口return axios.post('/refresh_token', { refresh_token: localStorage.getItem('refresh_token') }).then(res => {// 更新本地Token并重试原请求localStorage.setItem('access_token', res.data.new_token);return axios(request.config);});}return response;
}, error => {// 处理Token失效或刷新失败if (error.response.status === 401) {redirectToLogin();}return Promise.reject(error);
});

(2)刷新Token接口调用

async function refreshToken() {try {const res = await axios.post('/refresh_token', {refresh_token: localStorage.getItem('refresh_token')});localStorage.setItem('access_token', res.data.new_token);return true;} catch (error) {logout(); // 刷新失败则退出登录return false;}
}

三、安全措施

  1. 传输安全:全程使用HTTPS防止Token被截获。
  2. 存储安全:
    • 前端:Refresh Token存储在HttpOnly Cookie中,避免XSS攻击。
    • 后端:Token加密存储,Redis设置访问权限。
  3. 生命周期管理:
    • Access Token:15分钟有效期,Redis缓存30分钟。
    • Refresh Token:30天有效期,支持续期次数限制(如最多刷新50次)。
  4. 黑名单机制:用户注销或修改密码时,将Refresh Token加入黑名单。

四、最佳实践

  1. 续期触发策略:
    • 时间阈值:Token剩余1分钟时触发刷新。
    • 操作感知:用户持续操作(如每5分钟有请求)自动续期。
  2. 兜底逻辑:
    • 强制重新登录:超过72小时未操作,即使Refresh Token有效也需重新认证。
    • 刷新次数限制:防止Refresh Token被无限续期。
  3. 监控与告警:
    • 监控Token刷新频率,异常高频触发告警。
    • 记录刷新日志,便于审计。

五、方案优势

维度传统单Token方案双Token自动续期方案
用户体验频繁登录打断操作无感刷新,操作连贯
安全性长期有效Token风险高短期Access Token降低泄露影响
服务端压力每次请求需解密验证续期操作减少重复认证

总结:Token自动续期通过双Token机制、缓存校验和前后端协作,实现了安全与体验的平衡。实际部署时需结合业务场景调整Token有效期和续期策略,并严格遵循安全规范。

http://www.dtcms.com/wzjs/53719.html

相关文章:

  • 茂名网站建设教南宁百度seo排名
  • 陕西免费做网站seo标题优化关键词
  • pageadmin做的网站的域名必须要备案吗软文营销常用的方式
  • 手机网站设计手机壳尺寸一览表网站投放广告费用
  • 枣庄哪里有做网站设计seo站长查询
  • 网站可以做外部链接吗沈阳网络关键词排名
  • 网络公司 网站设计开网店怎么推广运营
  • 美容行业培训网站建设东莞百度seo排名
  • 网络宣传网站建设seo网站推广优化论文
  • b2c网站资讯近10天的时事新闻
  • 门户网站建设经验交流搜索引擎
  • 福田大型商城网站建设房地产最新消息
  • 网站后台难做么广州网络推广平台
  • 源码怎么做成网站seo搜索引擎优化课后答案
  • 怎么删除网站死链刷赞网站推广免费链接
  • 做pc端网站好么浏阳廖主任打人
  • 网站空间是啥东莞网站建设优化推广
  • htmlcss做网站首页临沂seo代理商
  • 网站空间的地址百度宁波运营中心
  • 众筹网站哪家好抖音推广方案
  • wordpress 图片排版南京seo顾问
  • iis禁止通过ip访问网站seo网站推广软件排名
  • 南京网站设计价格营销推广主要包括
  • 男女这样做那个网站seo刷词
  • 福建省中城建设工程有限公司网站舆情服务公司
  • 公司建网站流程百度 搜索热度
  • 手机网站和电脑网站开发网店运营在哪里学比较好些
  • 西安南郊网站建设珠海网络推广公司
  • 做的物流网站有哪些太原网络推广价格
  • 网站广告策划百度seo关键词优化