【问题标题】:Docusign Node.JS JWT example - PEM_read_bio:bad end lineDocusign Node.JS JWT 示例 - PEM_read_bio:bad end line
【发布时间】:2019-01-29 11:49:57
【问题描述】:

我正在尝试运行 DocuSign https://github.com/docusign/eg-01-node-jwt 示例并收到 PEM 错误 - PEM_read_bio:bad end line

我最初有一个 Start line 错误,由于我错过了 -----BEGIN RSA PRIVATE KEY----- 和 END Key cmets,因此该错误已得到纠正,因此这表明私钥存在另一个问题。我尝试了各种不同的引号并更改了密钥的格式,但仍然出现错误

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

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

我正在使用示例中的 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-----`

(删除了中间部分的key)

所以当我运行 start 我得到这个错误

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

docusign_eg01_oauth_jwt_authentication@1.0.0 启动 c:\Users..\eg-01-node-jwt-master 节点索引.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)

(node:14568) UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。 (拒绝编号:2) (节点:14568)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。

【问题讨论】:

  • 您需要将密钥重新格式化为一行,我在下面发布了答案。

标签: node.js docusignapi


【解决方案1】:

嗯,很抱歉给您带来了麻烦。

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

【讨论】:

  • 干杯 - 这为我指明了正确的方向。尝试上述方法后发现它与 Key 的格式有关
  • 太棒了!很高兴它对你有用。谢谢你的检查。
【解决方案2】:

这是一个关键的格式问题,需要解决:

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

注意:如果使用 Sublime,请确保在执行查找/替换时启用正则表达式选项,否则它将不起作用。

【讨论】:

  • 感谢尔金!您对原始问题的评论最能帮助我解决这个问题。将 docusign API 中的密钥粘贴到反引号内的 VSCode 中会导致相同的问题。我通过删除由于缩进而插入的前导空格并按照您的建议用 '\n' 替换隐藏的新行来修复它。我的密钥现在看起来像这样:-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAA.......E3\n-----END RSA PRIVATE KEY-----\n
猜你喜欢
  • 2017-12-16
  • 2020-04-25
  • 2020-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 2020-05-04
相关资源
最近更新 更多