You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何将JWT令牌放在Authorization头而非请求体中?

为什么JWT令牌通常放在Authorization请求头(带Bearer前缀)里,而非POST请求体?
  • 贴合HTTP规范与REST设计逻辑:HTTP协议里的Authorization头就是专门为身份验证凭证设计的,POST请求体的本职是传递业务数据。把令牌放在头里,能让身份验证信息和业务数据彻底分离,符合REST接口“资源操作与身份校验分离”的设计思路。
  • 适配所有HTTP请求方法:如果把令牌塞进POST体,那GET、PUT、DELETE这些非POST请求就没法用这套方式传凭证了。而请求头是所有HTTP方法都支持的,能统一所有接口的身份验证逻辑,不用为不同请求方法写不同的凭证处理代码。
  • 安全性与生态适配:很多服务器、网关会自动对Authorization头里的内容做脱敏处理(比如日志里不打印),但POST体的内容可能会被完整记录,降低令牌泄露的风险。另外,几乎所有Web框架、身份验证中间件都默认支持从Bearer格式的Authorization头读取令牌,集成起来零额外成本。
Node.js中验证请求头里JWT令牌的便捷方法

方式一:用jsonwebtoken手动实现(通用所有Node.js Web框架)

先安装依赖:

npm install jsonwebtoken

然后写一个验证中间件:

const jwt = require('jsonwebtoken');

// 自定义身份验证中间件
function checkAuth(req, res, next) {
  // 从请求头取出Authorization字段
  const authHeader = req.headers.authorization;
  // 拆分出Bearer后面的令牌(格式必须是"Bearer <token>")
  const token = authHeader?.split(' ')[1];

  if (!token) {
    return res.status(401).send('未提供身份令牌');
  }

  // 验证令牌,替换成你自己的JWT密钥
  jwt.verify(token, '你的JWT_SECRET_KEY', (err, decoded) => {
    if (err) {
      return res.status(403).send('令牌无效或已过期');
    }
    // 把解析后的用户信息挂载到req对象,后续路由可以直接用
    req.user = decoded;
    next();
  });
}

// 示例:在Express路由中使用
app.get('/user/profile', checkAuth, (req, res) => {
  res.json({ message: '访问个人资料成功', userInfo: req.user });
});

方式二:用express-jwt快速集成(Express框架专属)

express-jwt是封装好的Express中间件,能省去手动解析头、验证令牌的代码:
先安装依赖:

npm install express-jwt

然后配置使用:

const express = require('express');
const { expressjwt: jwt } = require('express-jwt');
const app = express();

// 配置JWT验证中间件,所有/protected开头的路由都会自动验证
app.use('/protected', jwt({
  secret: '你的JWT_SECRET_KEY', // 替换成你的密钥
  algorithms: ['HS256'] // 要和签发JWT时用的算法一致
}));

// 受保护的路由,验证通过后解析出的用户信息在req.auth里
app.get('/protected/orders', (req, res) => {
  res.json({ message: '获取订单列表成功', user: req.auth });
});

// 统一处理验证失败的错误
app.use((err, req, res, next) => {
  if (err.name === 'UnauthorizedError') {
    res.status(401).json({ msg: '令牌无效或未提供' });
  } else {
    next(err);
  }
});

内容的提问来源于stack exchange,提问作者user332336

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 13:55:14