DocuSign .NET SDK - Esign DLL - Dealing with changes in Docusign Config Params regarding Error: 'Unexpected PEM type'

DocuSign .NET SDK - Esign DLL - Dealing with changes in Docusign Config Params regarding Error: 'Unexpected PEM type'

在 Esign 4.1.1 版本中,VS2019 Docusign 项目代码生成器生成这种类型的配置文件:

注意开发者必须将DocuSign“快速入门”页面生成的私钥复制粘贴到VS2019 Docusign项目向导中。密钥被转换为字符串,原始密钥文件中的每一行都用回车符 return.

表示

以这种方式使用私钥值,内联,以及所有其他参数非常方便。

此“RSAKey”参数值适用于 4.1.1 版本。但是 不会 与 5.2 版本。

在 Esign 5.2 版本中,我们现在处于 Asp.Net Core 3.1/.NET 5 代码风格,所以我们现在有这样的配置文件格式:

这不适用于 Esign 5.2。我推测 5.2 中的变化是这样的——Docusign 服务器生成密钥 file 的哈希值,如果生成的密钥 file 的哈希值如果外部客户端提交的文件不匹配,则会发回“未知 PEM 文件”错误。我试图强调 DocuSign 服务器上的第一个“门”检查 文件本身 ,而不是文件 中的 RSA 密钥的细微差别。

如果属实,后果是我们现在必须谨慎对待密钥文件。如果我想从远程源 store/retrieve 这个文件,我需要非常小心,没有一个字节是 changed/added/removed。这将需要仔细测试。正如您从上面的示例 appsettings.json 中看到的那样,我被迫添加“KeyFilePath”参数以获取物理文件,这意味着我必须始终将其放在我的项目中或能够远程加载它(完整的字节方式)来自远程源。这大大增加了开发人员和维护人员的负担。

理想情况下,我们需要一种方法来获得将密钥文件作为字符串放回配置参数的能力。

任何想法表示赞赏。

解决这个问题的一种方法是使用 https://base64.guru/ .

使用“File-to-Base64”选项允许我在普通配置文件中将其作为字符串参数提供。

然后使用它的 C# 代码如下所示:

var cred = LoadDocusingConfigIntoObject();

byte[] buffer = Convert.FromBase64String(cred.PrivateKey);

                this.OAuthToken = docusignClient.RequestJWTUserToken(
                    cred.IntegrationKey,
                    cred.ImpersonatedUserId,
                    cred.AuthServer,
                    buffer,
                    1,
                    scopes
                );