Token认证是什么?
你有没有遇到过这种情况:登录某个网站后,哪怕关掉浏览器再打开,也不用重新输入账号密码?这背后很可能就是Token在起作用。简单来说,Token就像是一张临时通行证,你在登录成功后,服务器会给你发一个独特的字符串,之后每次请求只要带上这张“通行证”,系统就知道你是谁。
和传统的Session认证不同,Token是无状态的。服务器不需要在内存里记住每个用户是否已登录,而是通过验证Token本身的合法性来判断身份。这种方式特别适合现在流行的前后端分离架构和移动端应用。
常见的Token类型:JWT
目前最常用的Token格式是JWT(JSON Web Token)。它由三部分组成:头部(Header)、载荷(Payload)和签名(Signature),用点号(.)连接。比如:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c第一段是头部,说明加密算法;第二段是载荷,包含用户信息和过期时间等;第三段是签名,用来防止数据被篡改。服务器用密钥对前两部分进行签名,客户端收到后原样带回,服务器再验证签名是否正确。
实际应用场景
比如你在手机上使用一个购物App,登录后浏览商品、加购、下单,这些操作都需要确认你是当前用户。App在登录后会保存服务器返回的Token,之后每次请求都在HTTP头里加上:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...后端接收到请求后,解析Token,确认用户身份和权限,然后返回对应的数据。整个过程不需要频繁查数据库,效率高,也方便做负载均衡。
安全性注意事项
Token虽然方便,但也不是绝对安全。如果被人截获,就可以冒充你的身份。所以一定要通过HTTPS传输,避免在URL中传递Token(容易被日志记录),也不要长期存储在LocalStorage里(有XSS风险)。
另外,Token通常设有过期时间。比如Access Token有效期2小时,到期后需要用Refresh Token去换取新的Access Token。Refresh Token一般更长,但也要妥善保管,一旦泄露必须支持主动吊销。
有些系统还会结合IP绑定、设备指纹等方式增强安全性。比如同一个Token如果突然从另一个城市或另一台设备发起请求,系统可能会要求重新验证身份。
自己实现一个简单的Token流程
假设你用Node.js写一个接口,可以这样生成JWT:
const jwt = require('jsonwebtoken');
const token = jwt.sign({ userId: 123, username: 'alice' }, 'your-secret-key', { expiresIn: '2h' });
res.json({ token });验证时:
jwt.verify(token, 'your-secret-key', (err, decoded) => {
if (err) return res.status(401).send('无效Token');
console.log(decoded.userId); // 123
});核心逻辑就是签发和验证两个步骤,前端不用关心细节,只要知道什么时候该带Token、什么时候需要重新登录就行。