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

JWT签名无效引发401未授权问题,求排查思路

JWT验证失败(401 Unauthorized)排查提示

核心问题聚焦:签名不匹配

JWT.io显示的"invalid signature"是触发401的核心原因,优先排查以下几点:

  • 确认生成与验证的密钥完全一致
    检查登录/注册接口生成token时用的JWT_SECRET,和受保护路由中间件验证token时的密钥是否完全相同:

    • 注意大小写、特殊字符、末尾是否有多余换行/空格(从.env文件读取时容易出现这类问题)
    • 避免一边用process.env.JWT_SECRET,另一边硬编码了不同值
  • 统一JWT生成与验证的算法
    生成和验证必须用同一种算法,比如生成时指定了HS256,验证时不能用RS256:
    生成示例:jwt.sign({ userId: user._id }, process.env.JWT_SECRET, { expiresIn: '7d', algorithm: 'HS256' })
    验证示例:jwt.verify(token, process.env.JWT_SECRET, { algorithms: ['HS256'] })

  • 排查Base64URL编码逻辑
    JWT的头部和payload要求用Base64URL编码(区别于标准Base64):

    • 不要手动编码/解码,交给jsonwebtoken这类库自动处理
    • 若手动处理,需确保替换+为-、/为_,并去掉末尾的=填充符
  • 检查请求头的token传递

    • Postman中Authorization头格式必须是Bearer <token>,注意Bearer后有且仅有一个空格,无多余换行/空格
    • 验证中间件提取token时,确认是req.headers.authorization.split(' ')[1],避免截取错误导致拿到无效字符串
  • 核对token的payload字段
    用JWT.io解析token,确认payload里的标识字段(比如userId)和验证时读取的字段完全一致,避免拼写错误(如user_id和userId混淆)

代码快速检查点

  1. 登录接口返回的token是否完整,没有被截断或修改
  2. 验证中间件是否捕获了JWT验证错误,并打印err.message(能直接看到是签名错误还是其他问题)
  3. 确认.env文件中的密钥没有被引号包裹(比如JWT_SECRET=mysecret而非JWT_SECRET="mysecret",部分环境会把引号当成密钥的一部分)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:42:32