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

如何从Bearer令牌中提取Token字符串?(node-jsonwebtoken场景)

优雅提取Authorization头中的令牌方法

嘿,这个需求我太熟悉了!node-jsonwebtoken确实只负责JWT的生成和验证,提取令牌得咱们自己来,这里分享几个通用且优雅的方案,不用硬绑定Bearer前缀:

1. 简单字符串分割法(最通用)

不管前缀是Bearer、Basic还是其他自定义标识,只要是「前缀 + 空格 + 令牌」的格式,直接分割取第二部分就行:

const authHeader = req.headers.authorization;

// 先检查授权头是否存在
if (!authHeader) {
  return res.status(401).json({ message: 'Authorization header is missing' });
}

// 分割成两部分,取空格后的令牌内容
const token = authHeader.split(' ')[1];

这个方法的好处是极简,兼容绝大多数标准的授权头格式,完全不用关心前缀是什么。

2. 正则表达式校验法(更严谨)

如果想同时做格式校验,避免非标准格式(比如没有空格、前缀和令牌混在一起),用正则捕获更稳妥:

const authHeader = req.headers.authorization;

// 匹配「任意非空格前缀 + 一个/多个空格 + 令牌」的格式,捕获令牌部分
const tokenMatch = authHeader?.match(/^\S+\s+(\S+)$/);

if (!tokenMatch) {
  return res.status(400).json({ message: 'Invalid authorization header format' });
}

const token = tokenMatch[1];

这个正则会确保授权头有明确的前缀和令牌分隔,要是格式不对直接返回错误,适合对格式要求严格的场景。

3. 兼容多空格/大小写的进阶正则

如果担心有些客户端可能输入多个空格,或者前缀大小写不统一(比如bearer、BEARER),可以调整正则:

// 允许前缀和令牌之间有多个空格,忽略前缀大小写
const tokenMatch = authHeader?.match(/^\S+\s+(\S+)$/i);

最后:提取后的令牌验证

拿到令牌后,就可以用node-jsonwebtoken做验证了,常规操作如下:

const jwt = require('jsonwebtoken');

try {
  const decodedPayload = jwt.verify(token, process.env.JWT_SECRET_KEY);
  // 验证成功,可使用decodedPayload里的用户信息等数据
  req.user = decodedPayload;
  next(); // 后续业务逻辑
} catch (error) {
  return res.status(401).json({ message: 'Invalid or expired token' });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:10:01