Docusign Node.JS JWT示例-PEM_read_bio:错误的结束行

时间:2019-01-29 11:49:58

标签: node.js docusignapi

我正在尝试运行DocuSign https://github.com/docusign/eg-01-node-jwt示例,并遇到PEM错误-PEM_read_bio:错误的结束行

我本来有一个开始行错误,但由于错过了----- BEGIN RSA PRIVATE KEY -----和END Key注释而已得到纠正,因此这指向私钥的另一个问题。我尝试了各种不同的引号,并更改了键的格式,但仍然出现错误

谷歌搜索错误给我答案格式或破折号,但所有这一切似乎都是正确的

自述文件说您可以使用环境变量,但是这些变量似乎不接受这么长的字符串-如果我进行粘贴,我只会得到第一行的开头

我正在使用示例中的dsconfig.js

  /** The private key */
    /** Enter the key as a multiline string value. No leading spaces! */
  , privateKey: env.DS_PRIVATE_KEY ||   `-----BEGIN RSA PRIVATE KEY-----
  MIIEogIBAAKCAQEAgXxpEI/it1KvSFTgduXIAbBBqnwTZXasyt4AaBHkuw+VFyhk
………..
  10kBAoGASgk77R0K87kUOvqLTDYQydV6pMyenLuGt+KsqsaiHwxO8/x53JEJn710
  uYJku2KMSAKndzlPnYfDw9yFN9BxENvzKzL4oRa8Lbfq+ziHFlfRiNvO1ebNURV5
  YNdbhBO4UfTx8808l84bNbL5e+2/w4O9FmoeUD1pO0H1RQCtDiI=
  -----END RSA PRIVATE KEY-----`

(已删除密钥的中间部分)

因此,当我开始运行时,会出现此错误

c:\ Users .. \ eg-01-node-jwt-master> npm start

  

docusign_eg01_oauth_jwt_authentication@1.0.0开始c:\ Users .. \ eg-01-node-jwt-master   节点index.js

发送包含三个文档的信封。此操作大约需要15秒钟...

checkToken: Starting up--need an accessToken
(node:14568) UnhandledPromiseRejectionWarning: Error: error:0906D066:PEM routines:PEM_read_bio:bad end line
at Sign.sign (internal/crypto/sig.js:80:26)
at Object.sign (c:\Users\..\eg-01-node-jwt-master\node_modules\jwa\index.js:76:45)
at Object.jwsSign [as sign] (c:\Users\..\eg-01-node-jwt-master\node_modules\jws\lib\sign-stream.js:32:24)
at Object.module.exports [as sign] (c:\Users\..\eg-01-node-jwt-master\node_modules\jsonwebtoken\sign.js:189:16)
at generateAndSignJWTAssertion (c:\Users\..\eg-01-node-jwt-master\node_modules\docusign-esign\src\ApiClient.js:62:16)
at exports.requestJWTUserToken (c:\Users\..\eg-01-node-jwt-master\node_modules\docusign-esign\src\ApiClient.js:881:19)
at Object._getToken [as getToken] (c:\Users\..\eg-01-node-jwt-master\lib\dsJwtAuth.js:94:31)
at Object._checkToken [as checkToken] (c:\Users..\eg-01-node-jwt-master\lib\dsJwtAuth.js:65:35)
at Object._sendEnvelope [as sendEnvelope] (c:\Users..\eg-01-node-jwt-master\lib\sendEnvelope.js:62:19)
at main (c:\Users\..\eg-01-node-jwt-master\index.js:40:36)

(节点:14568)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。引发此错误的原因可能是抛出了一个没有catch块的异步函数,或者是拒绝了一个.catch()无法处理的承诺。 (拒绝ID:2) (节点:14568)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。将来,未处理的承诺拒绝将以非零退出代码终止Node.js进程。

2 个答案:

答案 0 :(得分:0)

这是一个关键的格式问题,可以解决:

  1. 使用您喜欢的文本编辑器(我喜欢Sublime)打开密钥。
  2. 选择整个键值。
  3. 使用\n对密钥中的任何\\n序列进行正则表达式替换
  4. 在您的请求中使用新修改的密钥,它应该可以工作。

注意:如果使用Sublime,请确保在执行查找/替换时已启用“正则表达式”选项,否则它将无法正常工作。

答案 1 :(得分:0)

嗯,对不起,您遇到了这个麻烦。

Ergin的答案也可能有效。就个人而言,我不需要在Mac上删除新行。如果您使用Windows,则可能有所不同。

要检查的项目:

  • node --version应该返回v8.11或更高版本

  • 确保您使用的是管理工具中的私钥,而不是公钥。

  • 确保您使用反引号-来环绕RSA私钥。

  • 确保未设置环境变量DS_PRIVATE_KEY。或者可能更容易,将其从行中删除。

  • 确保您的client_id(集成密钥)正确。

例如

, privateKey: `-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAkbz3bi31zrH2ry4p8S4ncPoMdkUyu+MG46m9BalOKzWNNAvW
1LVs5ftlXxzA6V0m6nx895w8S761/qZ8xtAAl99DezRn/3CueeBUyw+tvlmEBu1C
IJK69GVoSInIKf6qyeL1WxxFV5R17QtIiQeT2yCa/fitCaxwxkNlYpP4wd5tcG0W
PEHgznlGh/vUboCuA4tQOcKytxFfKG4F+jM/g4GH9z46KZOow3Hb6g==
-----END RSA PRIVATE KEY-----`

行被忽略了。

要调试,请将断点放在https://github.com/docusign/eg-01-node-jwt/blob/master/lib/dsJwtAuth.js的第93行

然后计算表达式dsConfig.privateKey