Node.js 词条目录
前端Wiki/词条/JWT 鉴权

JWT 鉴权

定义用带签名的令牌做无状态身份验证的方案,Node 接口鉴权的主流选择

JWT 由头部、载荷、签名三段以点号拼接而成。服务端在登录成功后用密钥签发令牌,客户端把它放在后续请求的 Authorization 头里带上来,服务端用同一把密钥验证签名即可确认身份。全程不需要在服务端存储会话,天然适合分布式部署与前后端分离架构。

在 Node 里通常用 jsonwebtoken 签发与校验,再把校验逻辑封装成一个 Express 中间件保护需要登录的路由。要点:密钥必须放在环境变量里;载荷只放用户 ID 等非敏感信息;设置较短的有效期并用 refresh token 续期;令牌存进 cookie 时要开启 HttpOnly 与 SameSite。

JavaScript
const jwt = require('jsonwebtoken');
const express = require('express');
const app = express();
app.use(express.json());

const SECRET = process.env.JWT_SECRET; // 走环境变量

// 登录签发令牌
app.post('/login', (req, res) => {
  const token = jwt.sign({ userId: 1 }, SECRET, { expiresIn: '2h' });
  res.json({ token: token });
});

// 鉴权中间件:保护需要登录的路由
function auth(req, res, next) {
  const header = req.headers.authorization || '';
  const token = header.split(' ')[1];
  if (!token) {
    res.status(401);
    return res.end('未登录');
  }
  jwt.verify(token, SECRET, (err, decoded) => {
    if (err) {
      res.status(401);
      return res.end('令牌无效');
    }
    req.user = decoded;
    next();
  });
}

app.get('/me', auth, (req, res) => res.json(req.user));
app.listen(3000);
⚠ 常见误区
🔗 相关词条Express 中间件机制请求与响应处理
← 返回来源章节Express 中间件机制