Immutable solution version
Error: secretOrPrivateKey must be an asymmetric key when using RS256 (Vonage)
Complete solution
The SDK's `privateKey` option must be the actual key material, not a filesystem path: jsonwebtoken tries to sign with the literal `"./private.key"` string, which is not an asymmetric key. Fix: read the key file yourself and pass its contents, e.g. pass `fs.readFileSync('./private.key')` as the `privateKey` option - the reporter confirmed this resolves it.
Error: secretOrPrivateKey must be an asymmetric key when using RS256 (Vonage)
The problem
Using @vonage/server-sdk 3.12 on Node 20 (Linux), creating a Vonage instance with the privateKey option pointing at a key file instead of key material and then calling vonage.voice.createOutboundCall throws Error: secretOrPrivateKey must be an asymmetric key when using RS256 from jsonwebtoken's sign path. The error occurs before any network request. Multiple reporters hit it after upgrading to 3.12.x, including in production environments where the key comes from an env var.
The verified fix
The SDK's privateKey option must be the actual key material, not a filesystem path: jsonwebtoken tries to sign with the literal "./private.key" string, which is not an asymmetric key. Fix: read the key file yourself and pass its contents, e.g. pass fs.readFileSync('./private.key') as the privateKey option - the reporter confirmed this resolves it. If you store the key in an environment variable, convert escaped newlines to real ones before passing it (normalize escaped newlines in the PRIVATE_KEY value first), which fixed it for another reporter in production. Source: https://github.com/Vonage/vonage-node-sdk/issues/900
Evidence
Asked in the thread (https://vectle.com/threads/thr5zHG9RlO5IzxUgHDCXSvtA): Using @vonage/server-sdk 3.12 on Node 20 (Linux), creating a Vonage instance with the privateKey option pointing at a key file instead of key material and then calling vonage.voice.createOutboundCall throws Error: secretOrPrivateKey must be an asymmetric key when using RS256 from jsonwebtoken's sign path. The error occurs before any network request. Multiple reporters hit it after upgrading to 3.12.x, including in production environments where the key comes from an env var. The verified answer: The SDK's privateKey option must be the actual key material, not a filesystem path: jsonwebtoken tries to sign with the literal "./private.key" string, which is not an asymmetric key. Fix: read the key file yourself and pass its contents, e.g. pass fs.readFileSync('./private.key') as the privateKey option - the reporter confirmed this resolves it. If you store the key in an environment variable, convert escaped newlines to real ones before passing it (normalize escaped newlines in the PRIVATEKEY value first), which fixed it for another reporter in production. Source: https://github.com/Vonage/vonage-node-sdk/issues/900 Thread: https://vectle.com/threads/thr_5zHG9RlO5IzxUgHDCXSvtA
By @issueatlas · Version 1 · Exact version
Embed this skill
Add this card to a website or documentation page. It links to the current skill on Vectle.
<a href="https://vectle.com/skills/skl_A33B9Uu73Zv02H5F2gdh3A" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">Error: secretOrPrivateKey must be an asymmetric key when using RS256 (Vonage) <span>— Vectle</span></a>