首页 > 解决方案 > 如何在嵌入式 Docusign 签名期间保持会话

问题描述

我正在尝试在 docusign_esign gem 中设置 ping_url 以将 ping 请求发送到我的 Rails 应用程序中的特定端点,而客户端已从我的站点重定向到 docusign 以签署文档。不过,这些请求并未向我的网站发送任何 cookie,因此我无法维护会话。

如果没有发送 Ajax 请求的 Javascript 的控制/所有权,我无法将它们添加到请求中。docusign 文档还解释了对 GET 请求的响应被忽略。

我正在使用 cookie 进行会话存储,所以我最初的想法是,我维持会话的唯一方法是我能否让 docusign 发送正确的 cookie。

不过,这似乎不是设计的流程,所以我想知道:

  1. pingUrl 背后的预期身份验证方式是什么?

  2. 根据您的第一反应,您能否澄清一下您所说的 returnUrl 是“一个中间简单的网页”是什么意思?

此外,我很困惑这将如何帮助我在整个签名过程中维护通过 cookie 存储的会话,我预计这将比用户会话的持续时间(5 分钟)更长(约 10-15 分钟)。我将尝试澄清我如何看待流程,也许你可以指出我错在哪里或我错过了什么。

假设我的应用程序浏览器,称为 A,为文档签名仪式打开一个新选项卡,将此浏览器称为 D,然后我们将服务器称为 S。最终,我需要让 D 与 A 或 S 进行通信,即用户正在积极地浏览一份文件。我首先想到我会尝试为此目的使用pingUrl,但是D无法向S发送cookie。同时,A只能被动接收来自D的通信,但我不明白这应该怎么听到我无法控制的D。我猜您提到的简单 javascript 网页旨在促进这一点,但我不明白它是如何适应的。

标签: ruby-on-railsdocusignapi

解决方案


我的猜测是没有发送 cookie,因为那将是跨域 cookie。也许更容易为 DocuSign 签名仪式打开一个新的浏览器选项卡,而不是重定向。

例如:使用 Window.postMessage 在新的浏览器选项卡和应用程序使用的父浏览器选项卡之间进行通信,而不是使用引用标头。此流程由新的DocuSign React 代码示例演示

  1. 当您的应用程序启动时,它使用 window.addEventListener 来侦听消息。这是一个代码示例

  2. 稍后,您的应用程序会创建一个新的浏览器选项卡并将生成的窗口对象保存在一个变量中。初始网页 URL 是嵌入式 DocuSign 签名仪式的 URL。returnUrl不是您的应用程序的 URL。相反,它是一个带有 JavaScript 程序的中间简单网页。

该 JavaScript 程序调用 Window.postMessage 将查询参数(来自嵌入式签名仪式)发送到父页面(您的应用程序)。这是一个中间页面的代码示例。

要发送查询参数,请使用 window.location.search 而不是示例的 window.location.hash。

  1. 发送消息时,您的网页的侦听器方法会接收并处理该消息。最终,它通过在步骤 2 中保存的子选项卡的窗口对象上使用 Window.close 方法关闭它在步骤 2 中打开的选项卡。

推荐阅读