法律部门处理合同、证据文件以及其他高度机密的文档。将 PDF 上传到基于云的共享服务的常见工作流会立即产生安全风险:文件位于企业防火墙之外,您失去对谁可以查看以及查看多长时间的细粒度控制。
如果您能够将安全、加密的 PDF 查看器直接嵌入到您的 .NET Web 门户中,确保文档永不触及第三方服务器,该怎么办?
在本指南中,我们将逐步演示围绕 Doconut Viewer 构建的实用架构,该 .NET 文档查看器 SDK 安装在您自己的应用程序中,且不向 Doconut 服务器发起任何调用,因此文档永不离开您的基础设施。
在开始第一步之前,需要先明确两件事,因为后续内容都依赖于它们。Doconut.app 是免费网页查看器——一个网站,而不是组件,也不是您在此处安装的内容。加密、令牌和审计日志均由您自行构建:SDK 负责渲染文档,但不提供合规方案。Doconut 不持有 ISO 27001 证书、SOC 2 报告或 HIPAA 证明,因此您向监管机构提出的合规论点只能是架构层面的——文件始终停留在您已控制的边界内。
为什么传统云共享无法满足需求
| 风险 | 典型云服务 | 本架构的做法 |
|---|---|---|
| 数据外流 - 文件存储在外部服务器上 | 文件持久化在供应商的存储中,常常位于您无法控制的地区。 | PDF 保持在您自己的基础设施上。SDK 在本地渲染,且不调用任何外部服务。 |
| 访问时效失控 | 共享链接可以无限期转发。 | 您发放短期、一次性令牌。这是您编写的代码,而不是一个开关。 |
| 合规缺口 | 审计日志往往仅记录“下载”事件。 | 您记录每一次预览请求,因为请求会发送到您自己的端点。 |
| 插件依赖 | 许多查看器需要 Flash、ActiveX 或浏览器扩展。 | 读取者的机器上无需安装任何东西;浏览器直接接收渲染后的页面。 |
解决方案概览
- 在您的 .NET 项目中安装 Doconut Viewer。
- 使用服务器端密钥对 PDF 进行静态加密,利用 .NET 自带的加密库。
- 在 Razor 页面或 MVC 视图中嵌入查看器,并通过您应用程序签发的令牌进行访问控制。
- 对每一次预览请求进行日志记录,以便审计追踪和异常检测。
第 2、3、4 步是您应用程序的工作。SDK 负责第 1 步以及渲染;此设计中所有保护措施均由您拥有的代码实现,这也是它可以由您内部团队审计的原因。
下面详细演示每一步的操作,并提供密钥管理、令牌安全和合规日志的最佳实践建议。
第 1 步 – 准备您的 .NET 环境
-
在 Visual Studio 中打开您的解决方案(建议使用 2022 或更高版本)。
-
选择目标框架。Doconut Viewer 支持 ASP.NET、MVC、.NET Core、.NET 6+ 以及 Blazor。记录下您最终确定的版本——集成细节会因版本而异。
-
从 Doconut 下载页面 安装 SDK,使用与您所选版本匹配的包和文档。请务必参考该文档中的包名和安装步骤,而不是文章中的说明;不同版本之间可能已发生更改。
在此过程中,请将许可证配置文件排除在源代码管理之外。这是从工作原型泄露的最常见问题。
附加提示
- 将包引用存放在
Directory.Packages.props文件中,以实现跨多个服务的集中版本管理。
第 2 步 – 使用强加密存储 PDF
2.1 选择加密算法
这取决于你的决定和代码。 .NET 中的 System.Security.Cryptography 提供 AES-256-GCM,它提供认证加密——同时保证机密性和完整性——是静态文档的可辩护默认选项。
没有任何加密算法能让系统符合 GDPR、HIPAA 或 ISO 27001。这些框架关注的是流程、访问控制、保留和证据。加密只是众多控制措施之一,查看器库无法提供其余部分。
2.2 实施安全密钥管理
- 绝不要硬编码密钥。 使用 Azure Key Vault、AWS KMS 或 HashiCorp Vault 在运行时获取加密密钥。
- 定期轮换密钥——每 90 天是常见做法。提前规划重新加密作业;在事故中发现没有办法滚动密钥是非常糟糕的教训。
第 3 步 – 生成时限性、一次性令牌
预览令牌类似于 一次性徽章,会自动过期。它包含:
- 用户 ID – 谁被允许查看文档。
- PDF ID – 要流式传输的加密文件。
- 过期时间 – 通常为 5–10 分钟,可根据策略配置。
- 签名 – 使用 HMAC 或 RSA 签名以防篡改。
3.1 安全考虑
- 全程使用 TLS – 始终通过 HTTPS 提供令牌。
- 最小特权 – 只编码预览所需的数据,避免嵌入额外声明。
- 令牌撤销 – 在 Redis 中维护一个简单的“黑名单”,即可在用户访问权限变更时立即撤销。
第 4 步 – 嵌入 DoconutApp Viewer
4.1 服务器端流式传输端点
- 在内存中解密,如果你的威胁模型要求如此,这样明文永远不会落盘。这是你的端点,由你决定实现方式并自行审查代码。
- 渲染在你的服务器上进行,而不是在阅读者的浏览器中。这使得浏览器能够显示文档而无需接收源文件——同时也需要检查 SDK 将临时渲染输出写入何处,以及如何清除这些文件。
4.2 无需插件
阅读者通过标准 Web 技术获取渲染页面,因而 Viewer 可在 Chrome、Edge、Firefox 和 Safari 上工作,无需插件、ActiveX 控件或 Flash 依赖。律师的笔记本电脑上无需安装任何东西,这通常决定了安全审查能否顺利完成。
第 5 步 – 审计与日志记录以满足合规
法律团队常需 防篡改审计轨迹,记录谁在何时查看了哪份合同。实现结构化日志管道:
| 字段 | 描述 |
|---|---|
UserId | 请求查看的法律专业人员标识 |
PdfId | 加密文档的内部引用 |
Timestamp | 预览请求的 UTC 时间 |
IpAddress | 来源 IP(有助于地理位置检查) |
UserAgent | 浏览器字符串,用于取证分析 |
Result | 成功 / 失败(例如令牌无效、解密错误) |
最佳实践
- 将日志存储在 追加写入、不可变的数据存储 中(如 Azure Log Analytics、Splunk,或写一次的 S3 桶)。
- 启用告警,监控异常模式——例如同一令牌在几秒内被两个不同 IP 使用。
- 保留策略:根据所在司法辖区的要求保留日志(法律记录通常需保存 7 年)。
快速回顾
- 在 .NET 项目中安装 Doconut Viewer,参考对应版本的文档。
- 在写入时使用 .NET 自带的加密库 AES-256-GCM 加密 PDF;通过金库服务管理密钥。
- 在用户请求查看时发放短期、一次性预览令牌。
- 在服务器上渲染并在 Razor 页面中嵌入 Viewer,文档永不泄露给第三方,阅读者机器上也无需安装任何东西。
- 对每次预览进行日志记录,并对可疑模式设置告警,以满足审计需求。
第 2、3、5 步是你的代码实现。这是诚实的职责划分,值得在自己的安全文档中明确说明,因为审查员最终会询问各方的责任分工。
结论
安全的 PDF 共享不一定需要第三方服务。将 Doconut Viewer 嵌入您自己的 .NET 门户,您的法务部门可以在文件始终不离开您基础设施的情况下,展示机密合同、诉讼展品和内部政策。
SDK 为您提供的正是最后这一步:在您的环境中进行渲染,且无需回调。端到端加密、访问控制和审计日志都归您所有——这才是关键,因为如果一个查看器声称提供这些功能,您就必须信任供应商的合规性,而不是自己的。
准备好尝试了吗?访问 doconut.com —— 试用许可证免费,且 实时演示 是在您编写上述任何代码之前,最快了解渲染在最棘手的展品上是否可靠的方式。
实施这些步骤将让合规官员安心,降低攻击面,并将您的 PDF 严格保留在企业防火墙内——正是任何法务团队所需的安全姿态。
保持安全,保持合规,并将那些密封的信封放在它们该在的地方:您自己的保险库中。
