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

NodeJS调用AWS KMS实现JWT签名验证抛出KMSInvalidSignatureException如何解决

问题排查与修复方案

核心错误原因

你遇到的KMSInvalidSignatureException异常由两个常见原因导致:

  1. 验签时签名参数格式错误:你生成JWT时将KMS返回的二进制签名转成了base64url编码的字符串,但是调用kms.verify接口时直接传入了这个编码后的字符串,AWS KMS的verify接口要求Signature参数必须传入原始二进制Buffer,不能是编码后的字符串。
  2. 密钥配置错误:请确认你在AWS KMS中创建的RSA 2048密钥的密钥用途设置为签名和验证(SIGN_VERIFY),如果密钥用途配置为加密/解密,也会触发验签失败异常。

修复后的代码

只需修改verifyToken函数,将base64url格式的签名解码为原始Buffer即可:

async function verifyToken(token) {
  const [header, payload, signature] = token.split('.');
  const message = Buffer.from(`${header}.${payload}`);
  // 新增:将base64url格式的签名解码为原始二进制Buffer
  const decodedSignature = base64url.toBuffer(signature);
  return await kms.verify({
    KeyId: process.env.KEY_ID,
    Message: message,
    MessageType: 'RAW',
    Signature: decodedSignature, // 替换为解码后的Buffer
    SigningAlgorithm: 'RSASSA_PKCS1_V1_5_SHA_256'
  }).promise();
}

额外校验项

如果修改后仍然报错,可以逐一检查以下配置:

  • 确认你使用的AWS账号/角色拥有该KMS密钥的kms:Sign和kms:Verify权限
  • 确认签名和验签使用的是同一个KMS密钥
  • 确认签名算法RSASSA_PKCS1_V1_5_SHA_256和JWT头中声明的RS256对应一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:24:03