Jwt 错误:EVP_PKEY_sign_init:此密钥类型不支持操作

Jwt 错误:EVP_PKEY_sign_init:此密钥类型不支持操作,jwt,Jwt,使用jsonwebtoken 8.2.0,以下代码使用RS256对有效负载进行签名: const jwt = require('jsonwebtoken'); const token = jwt.sign( //<<==sign throw error below { uid: this.id, //<<==payload }, key, //<<==RSA private key of 2048bit {

使用
jsonwebtoken 8.2.0
,以下代码使用RS256对有效负载进行签名:

const jwt = require('jsonwebtoken');
const token = jwt.sign(  //<<==sign throw error below
    {
      uid: this.id, //<<==payload
    },
    key,  //<<==RSA private key of 2048bit
    {
      expiresIn: (parseInt(process.env.jwt_token_expire_days) * 24).toString() + 'h',
      algorithm: 'RS256'
    }
  );
RSA私钥(2048bit)如下所示:

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAtBwLxqZEirr0uhtMTThmVDu3XKFVgE+qQqQ6oi6P/cvnTBHc
zlnmgqYNpufUbnIgGSZ9RzL29gVq6o/Dc4Sf1C0sEdkU1A5weFEegpeQTfEU1XI9
.....
0q6yoDXSl7JC+y5BWaz75xFX+tb4hKVTD27BvNDYRuvRsFeiKnn7vDmVS1/CoSnd
bv9Y1DrudRU2PkgAUPqbxDzuCNY9VW8IAP/DCw0oJBJP+wzdH9uvhg==
-----END RSA PRIVATE KEY-----

这里出了什么问题?

这可能是因为您的RSA密钥实际上是一个RSA-PSS密钥,对使用的填充、用法、算法、摘要或它们的任何组合都有限制。你可以通过执行

const{createPrivateKey}=require('crypto'))
const pk=createPrivateKey(pem)
console.log(pk.asymmetricKeyType)

如果记录了
rsa pss
,则您的密钥限制了可以使用它执行的操作。

返回
Ed25519
。很奇怪。一定是把代码搞砸了。非常感谢。
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAtBwLxqZEirr0uhtMTThmVDu3XKFVgE+qQqQ6oi6P/cvnTBHc
zlnmgqYNpufUbnIgGSZ9RzL29gVq6o/Dc4Sf1C0sEdkU1A5weFEegpeQTfEU1XI9
.....
0q6yoDXSl7JC+y5BWaz75xFX+tb4hKVTD27BvNDYRuvRsFeiKnn7vDmVS1/CoSnd
bv9Y1DrudRU2PkgAUPqbxDzuCNY9VW8IAP/DCw0oJBJP+wzdH9uvhg==
-----END RSA PRIVATE KEY-----