我想使用DocuSign Web挂钩,以便可以将完整的信封存储在我们的内部文档存储库系统中。我已经读到,获取文档的首选方法是使用传入的Web挂钩消息中返回的envelopeId,并使用API查询信封及其内容,以使传入的消息保持清淡,而不必处理任何大文件问题。
使用这种方法,我需要验证我的服务帐户以便查询信封。由于我想将其作为后端过程进行,因此我不确定如何进行身份验证,因为在所有身份验证方法中,都需要用户交互才能允许应用访问DocuSign。
我想念什么?什么是实现此目的的最佳选择?我是否应该只在收到的邮件中包含信封的内容,这样我就不需要再打个电话找回它了?
答案 0 :(得分:1)
好吧,所以我终于把所有这些都做好了。 Payf1,Amit和Larry提到的所有内容都是正确的,并且很好地引用了此难题的各个方面。这是我在未获得用户同意的情况下将JWT设置为使用DocuSign API的步骤(称为Internal Apps的管理同意。对此有一个完整的document)。
在您的应用程序中,使用此代码获取授权令牌。 User_id是您在第5步中授予访问权限的用户的guid(在其个人资料页面中找到)。
byte [] privateKeyBytes = System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(privateKeyFullPath));
List<string> scope = new List<string>();
scope.Add(OAuth.Scope_SIGNATURE);
scope.Add(OAuth.Scope_IMPERSONATION);
OAuthToken _AccessToken = _ApiClient.RequestJWTUserToken(client_id, user_id, OAuth.Demo_OAuth_BasePath, privateKeyBytes, 4, scope);
对于我的应用程序,我只是想在从DocuSign Web挂钩收到信封ID时返回信封:
_ApiClient.Configuration.AddDefaultHeader("Authorization", "Bearer " + _AccessToken.access_token);
EnvelopesApi envelopesApi = new EnvelopesApi(_ApiClient.Configuration);
EnvelopeDocumentsResult docList = envelopesApi.ListDocuments(accountId, envelopeId);
答案 1 :(得分:0)
欢迎来到社区Scott。
您可以使用单独的API调用来检索文档,也可以选择在Webhook中包括文档PDF和/或完成证书。 Webhook日志将始终包含整个信封数据,包括字段值。有关更多信息,请参见here。
要回答有关身份验证的问题,您需要使用直接与DocuSign帐户集成并且不对每个最终用户进行身份验证的服务集成。换句话说,这是一种无用户的集成,可对文档存储系统和DocuSign进行身份验证。 JSON Web令牌承载授权是您可能要研究的身份验证方法。有关更多信息,请参见here。
答案 2 :(得分:0)
您的问题很好。我同意@ Payf1的回答。这是一些其他信息。
您需要拥有DocuSign Webhook系统的订阅,这样您的监听器才能收到Webhook通知。
选项1:在帐户级别设置Connect系统。这将为您订阅该帐户上任何用户发送的每个信封,通过Powerforms,通过DocuSign Web工具以及通过API发送的信封。只需忽略不感兴趣的信封的传入通知即可。不要拒绝它们,先确认然后再忽略它们。
选项2:对于要进行Webhook订阅的每个信封,您都必须使用API创建信封,并在Envelopes::create调用中包含eventNotification
对象。
这两个选项的传入通知都是相同的。
要正确处理传入的Webhook通知流,最好的体系结构是将每个通知放置在可靠的队列中,然后将消息接收确认给DocuSign。
Azure Service Bus,AWS Simple Queue Service,Google Cloud Tasks以及许多本地软件排队库提供可靠的队列。
然后,单独的 worker 进程可以异步处理消息。
正如您正确地说的那样,建议专家的建议是不要在通知正文中包含这些文件。
因此,工作进程需要一个DocuSign访问令牌来对DocuSign进行API调用,以检索信封的文档。正如@ Payf1所建议的那样,JWT Grant通常是正确的身份验证解决方案。如果您的应用根据需要使用刷新令牌来生成访问令牌,那么也可以使用Auth Code Grant身份验证授权。
有关JWT Grant的信息,请参见eg-01 series of code examples。
答案 3 :(得分:0)
您正在混淆两件事,其中之一是Webhook,它不需要JWT AccessToken,因为只要您在信封生命周期中发生了所订阅的触发事件,它就只是从DocuSign向监听器发出POST服务调用。您需要JWT生成的AccessToken来调用任何DS API服务。 Obtaining Consent将说明如何获得使用JWT生成AccessToken的同意。如果您在DS帐户中的所有用户都使用相同的公司电子邮件,并且您可以通过更新该公司电子邮件DNS中的TXT令牌来声明DS中的该公司电子邮件域,则可以使用“管理员同意”。另外,要使用“管理员同意书”,您还需要向DS客户经理咨询,如果您的订阅计划允许您使用DS中的“组织”功能。但是,如果您没有正确的订购计划,或者无法在DocuSign中声明电子邮件域,那么您需要在获得该用户的访问令牌之前明确获得用户的同意。
答案 4 :(得分:0)
很抱歉造成混乱。我是专门询问有关JWT身份验证的问题。我只想从传入的网络挂接呼叫中接收信封ID。然后使用DocuSign API查询已签名的文档。
在JWT中使用这种方法时,我的理解是我需要获取一个“访问代码”。我想我发现了一个难题,那就是我需要在我的帐户中启用组织管理。我这样做了,并授权我的应用使用“管理员内容范围”为“扩展”。我想使用后端处理来处理签名的文档。我对获取访问代码的理解是,我需要通过浏览器发出此请求。但是没有供用户交互的浏览器。这就是我遇到的问题。我如何获取后端进程的访问代码和/或访问令牌以进行此API调用?