0

我正在尝试使用预签名的 URL 获取 pdf 文件以进行电子签名。我使用 Amplify Storage 生成 URL。然后我向 HelloSign 函数提供 URL,以将文件带入嵌入窗口。我可以使用打开文档,window.open但是这种其他方法会带来SignatureDoesNotMatchThe request signature we calculated does not match the signature you provided.错误。

The request signature we calculated does not match the signature you provided. Check your key and signing method.

key: string = 'bucketname/path/to/file.pdf'
expires: number = 60

const url = await Storage.get(key, {
  level: 'public',
  cacheControl: 'no-cache',
  signatureVersion: 'v4',
  ContentType: 'application/pdf',
  expires: 60,
  customPrefix: {
    public: '',
    protected: '',
    private: '',
  },
})

hellosign.open(url, {
  clientId,
  skipDomainVerification: true,
})

我在 Github 上找到的一个修复是在使用 SDKsignatureVersion初始化类实例时包含。S3但是我没有使用 SDK,所以我尝试在配置 Amplify 时提供它,如下所示:

AWSS3: {
  bucket,
  region,
  signatureVersion: 'v4',
},

不用说它没有解决问题。我在文档中找不到对此的任何引用,因为该Amplify.configure函数包含any他们的文档。

我尝试单击预签名的 URL,并且能够毫无问题地下载文档。我检查了请求,并看到了与来自hellosign.open. 有什么想法我可以尝试吗?

4

1 回答 1

1

hellosign.open() 只需要加载嵌入的 URL。这些将是从请求返回到以下端点的 URL:

  • /embedded/sign_url/(签名 URL - 嵌入式签名)
  • /template/create_embedded_draft(编辑 URL - 嵌入式模板创建)
  • /embedded/edit_url/(编辑 URL - 嵌入式模板编辑)
  • /unclaimed_draft/create_embedded(声明 URL 嵌入请求)
  • /unclaimed_draft/create_embedded_with_template(声明 URL 嵌入请求)

如果您想在您网站的 iframe 中的文档上收集签名,嵌入式签名可能就是您要寻找的。在这种情况下,您需要创建签名请求,并请求:

/signature_request/create_embedded

然后使用您通过 Amplify Storage 创建的 URL 作为 file_url[] 请求参数的值。

创建请求后,在响应对象中找到签名者的签名 ID,并将其用于 /embedded/sign_url/ 的请求中

这将返回一个您可以使用加载的标志 URL hellosign.open()

于 2021-10-12T14:55:41.333 回答