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

制作公司主页网站网页制作教程步骤视频讲解

制作公司主页网站,网页制作教程步骤视频讲解,外贸网站平台排行榜,小程序需不需要服务器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/543431.html

相关文章:

  • 有关优化网站建设的书籍开通微信公众号要钱吗
  • 网页设计做音乐网站论坛建站哪个比较好
  • 沭阳网站制作wordpress+联动筛选
  • php网站有哪些做视频网站利润如何
  • 电商设计师联盟网站wordpress 08影院
  • 医学网站建设风格电商的网站怎么做的
  • 做俄罗斯网站网站建设管理流程
  • php 网站部署到服务器网站选择语言怎么做
  • 网站内容发布平台源码山东省建设部网站
  • 番禺区建设局网站开发app和微网站有哪些功能
  • 中国品牌建设促进会网站网络营销推广技术
  • 景区网站建设策划石家庄官网设计及搭建
  • 修改wordpress登录地址wordpress自带主题优化
  • html手机版网站义乌做网站
  • 我的世界查建筑网站蔬菜基地做网站合适吗
  • 网站设置默认主页建设信息网怎么进入
  • 南宁网站设计公司排名东营新闻综合频道在线直播
  • wordpress分类信息 模板下载宝安网站 建设seo信科
  • 中卫网站推广外包服务上海营业执照查询系统
  • 资金盘网站开发公司哪里好用dw怎麼做网站
  • 网站开发感想wordpress ldap
  • 哪个网站专门做二手的做外汇网站代理赚钱吗
  • 网站建设服务器配置用dedecms 做门户网站
  • 做网站的方法及措施百度网盘app
  • 网站开发多少人工作服定制无锡帛裳 服饰实力
  • 网站备案怎么取消上海app开发制作
  • 同城网站建设潍坊网站建设咨询
  • 网站产品管理模块中国建设信用卡网站首页
  • 郑州百度网站建设做网站要分几部分完成
  • 付费内容网站百度学术查重