Ajax Token 入门指南:从基础原理到安全实践

1次阅读
没有评论

共计 1391 个字符,预计需要花费 4 分钟才能阅读完成。

image.webp

为什么我们需要 Token?

在传统的 Web 开发中,我们通常使用 Session 和 Cookie 来进行用户身份验证。这种方式在单服务器环境下工作得很好,但在现代分布式系统中会遇到很多问题:

Ajax Token 入门指南:从基础原理到安全实践

  • 扩展性问题 :当应用部署在多台服务器上时,Session 需要在服务器间同步
  • 跨域限制 :Cookie 默认不支持跨域请求
  • 移动端兼容 :原生 App 难以处理基于 Cookie 的认证

认证方案对比

方案 适用场景 主要缺点
Cookie 传统 Web 应用 跨域问题、CSRF 风险
Session 服务端渲染应用 服务器内存消耗、扩展性差
JWT 前后端分离、分布式系统 Token 无法主动失效
OAuth2 第三方登录、开放平台 实现复杂度高

JWT 核心实现

Node.js 生成 Token 示例

const jwt = require('jsonwebtoken');
const secret = 'your-strong-secret'; // TODO: 生产环境应从配置读取

// 生成 Token
function generateToken(user) {
  return jwt.sign({ userId: user.id}, // payload
    secret,
    {expiresIn: '1h'}  // 过期时间
  );
}

// 验证 Token
function verifyToken(token) {
  try {return jwt.verify(token, secret);
  } catch (err) {console.error('Token 验证失败:', err);
    return null;
  }
}

前端携带 Token 的两种方式

  1. Authorization Header (推荐)
axios.get('/api/data', {
  headers: {'Authorization': `Bearer ${token}` 
  }
});
  1. URL Query 参数 (不推荐,会出现在日志中)
axios.get(`/api/data?token=${token}`);

安全实践要点

Token 存储方案

  • LocalStorage:容易受 XSS 攻击,但能防止 CSRF
  • HttpOnly Cookie:能防 XSS,但需额外处理 CSRF

防护措施

  • 防 XSS(Cross-Site Scripting)
  • 对所有用户输入进行转义
  • 设置 Content-Security-Policy 头

  • 防 CSRF(Cross-Site Request Forgery)

  • 检查 Origin/Referer 头部
  • 使用 CSRF Token

双 Token 刷新机制

sequenceDiagram
    客户端 ->> 服务端: 使用 access_token 请求
    服务端 -->> 客户端: token 已过期
    客户端 ->> 服务端: 用 refresh_token 请求新 token
    服务端 -->> 客户端: 返回新 access_token

常见问题排查

  1. Token 失效
  2. 检查时钟同步(JWT 依赖时间)
  3. 验证密钥是否一致
  4. 检查 Token 是否超过长度限制

  5. 生产环境配置

  6. 必须使用 RS256 等非对称算法
  7. 密钥长度至少 2048 位
  8. 设置合理的过期时间(建议 access_token 15 分钟)

延伸思考

当 Token 被中间人截获时,除了使用 HTTPS 外,我们还可以:

  • 绑定客户端指纹(IP/User-Agent)
  • 实现短期有效的 Token
  • 关键操作增加二次验证

Token 认证是现代 Web 开发的必备技能,希望这篇指南能帮助你快速上手。在实际项目中,记得根据业务需求选择合适的方案,并始终把安全性放在首位。

正文完
 0
评论(没有评论)