问题描述
在 Esign 4.1.1 版本中,VS2019 Docusign 项目代码生成器生成这种类型的配置文件:
注意,开发者必须将DocuSign“快速入门”页面上生成的私钥复制粘贴到VS2019 Docusign项目向导中。密钥转换为字符串,原始密钥文件中的每一行用一个回车表示。
以这种方式内联使用私钥值与所有其他参数非常方便。
这个“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 密钥。
如果为真,后果是我们现在必须用小孩手套处理密钥文件。如果我想从远程源存储/检索此文件,我需要非常小心,不要更改/添加/删除一个字节。这将需要仔细测试。从上面的示例 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
);