ASP.NET Core如何实现站内可自定义纯文本协议数字签名
ASP.NET Core 站内纯文本自定义签署实现方案
你现有已经完成Adobe eSign的基础集成,不需要重构现有代码,按以下路径调整即可实现纯文本协议站内高度自定义签署的需求:
核心思路
放弃原有静态PDF上传、默认Embed Widget嵌入的模式,把「协议内容展示、签署交互UI」全放在自有站点实现,仅把文档存证、签名合规校验的环节交给eSign API处理,既保留你已经跑通的eSign签名法律效力,又能实现100%的UI自定义。
分步实现
1. 后端动态生成eSign可识别的纯文本协议
不需要提前生成静态PDF文件,直接把你要展示的纯文本协议转成简单HTML格式,调用eSign临时文档接口上传即可:
- 对纯文本做基础HTML排版,只保留分段、换行、必要的重点标注,不要加复杂样式,确保和前端展示的内容完全一致
- 调用
/transientDocuments接口上传HTML格式的临时协议,拿到临时文档ID - 参考代码片段:
// 纯文本协议转基础HTML,做XSS过滤避免注入 var safeContent = WebUtility.HtmlEncode(plainTextAgreement).Replace("\n", "<br/>"); var agreementHtml = $@" <html><body style='font-size:14px;line-height:1.6;'> <h4>服务协议</h4> {safeContent} <p>签署人:{CurrentUser.Name}</p> <p>签署时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss}</p> </body></html>"; var fileBytes = Encoding.UTF8.GetBytes(agreementHtml); var fileContent = new ByteArrayContent(fileBytes); fileContent.Headers.ContentType = new MediaTypeHeaderValue("text/html"); var form = new MultipartFormDataContent(); form.Add(fileContent, "File", "agreement.html"); // 复用你现有封装好的eSign鉴权客户端发请求 var docRes = await eSignClient.PostAsync("/api/rest/v6/transientDocuments", form); var transientDocId = JsonSerializer.Deserialize<DocCreateResponse>(await docRes.Content.ReadAsStringAsync()).TransientDocumentId;
2. 自定义站内签署交互(完全不用Adobe默认UI)
这部分完全不用受eSign Widget的样式限制,按你自己的UI需求开发即可:
- 前端直接渲染纯文本协议内容,和你现有页面的展示逻辑保持一致
- 协议底部放自定义签署区:可以做手写签名画布、同意勾选框、身份验证码输入、签名确认按钮,样式完全适配你现有网站设计
- 后端创建eSign协议时,指定签署模式为嵌入式签署,回调地址填你自己站内的签署完成页,不要用Adobe默认跳转页
- 不需要iframe嵌入Adobe的签署页面,所有签署交互都在你自己的页面完成
3. 签署完成后的存证与校验
用户在你自定义的签署区完成操作提交后,按以下逻辑处理:
- 后端先校验用户身份、签署操作的合法性(比如验证码是否正确、是否勾选同意协议、签名数据是否为空)
- 把用户提交的签名数据(手写签名图片base64、签署时间、IP/设备信息、协议内容快照)和之前拿到的临时文档ID绑定,调用eSign的签署提交接口,完成eSign侧的协议状态更新,拿到官方的签名存证哈希、存证ID
- 本地数据库存储协议原文快照、用户签名数据、eSign存证ID与哈希值,后续需要验签时直接拿哈希到eSign侧校验即可,和PDF签署具备同等法律效力
可选简化方案
如果你的简易协议没有强合规存证要求,甚至可以完全不调用eSign的签署接口:
- 后端对展示给用户的纯文本协议内容+用户ID+签署时间戳生成哈希值
- 用户提交签署操作后,把协议内容、签名数据、哈希值存在本地数据库即可
- 后续出现纠纷时,用哈希校验协议内容是否被篡改,这种方案开发成本最低,自定义程度最高

内容的提问来源于stack exchange,提问作者Rasitha Ariyarathna
相关产品推荐
相关产品推荐

