跳到主要内容
ecdsa.com
jsonwebtoken (Node.js)JWT 库

错误信息

invalid algorithm

含义

令牌 alg 头部的值不在你的验证方接受的算法列表中。jsonwebtoken 在处理签名之前就会检查这一点,因此令牌的签名可能完全没有问题——只是使用了你没有允许的方案。这道关卡是按设计正常工作的安全功能,而不是解析错误。

原因

修复方法

  1. 1.

    把允许列表固定为颁发者实际使用的算法

    解码头部查看实际的 alg,然后让允许列表只包含这个值——并确保密钥类型匹配(ES256 用 EC 密钥,RS256 用 RSA 密钥)。

    js
    const { header } = jwt.decode(token, { complete: true });
    console.log(header.alg); // e.g. "ES256"
    
    jwt.verify(token, ecPublicKeyPem, { algorithms: ["ES256"] });
  2. 2.

    分两个阶段上线算法变更

    在密钥/算法轮换期间,验证方必须短暂地同时接受两种方案——每种方案都通过 kid 绑定到各自的密钥——然后再缩减回一种。

    js
    // transition window only:
    jwt.verify(token, keyForKid(header.kid), { algorithms: ["ES256", "RS256"] });
    // after all RS256 tokens expired:
    jwt.verify(token, ecPublicKeyPem, { algorithms: ["ES256"] });

相关错误

浏览完整的签名错误库