使用 Doconut 设计仅查看文档工作流
7/31/2026

使用 Doconut 设计仅查看文档工作流

了解如何在 ASP.NET 中使用服务器端授权、受控存储、审计以及文档化的 Doconut 查看器设置来设计仅查看文档工作流。

移除下载按钮可以支持仅查看工作流,但这并不能使可见文档无法被复制。安全的实现需要服务器端授权、受保护的存储、短时会话、细致的日志记录,以及对用户界面限制能够实现的内容有清晰的认识。

Doconut 提供用于业务应用的嵌入式 .NET 文档查看器。本教程阐述了相关的安全设计,且不发布猜测的配置属性或其他未文档化的 Doconut 源代码。

深度防御控制保护嵌入式文档查看器并限制导出操作
深度防御控制保护嵌入式文档查看器并限制导出操作

1. 定义“仅查看”意味着什么

从明确的策略开始。不同团队对“仅查看”的定义可能包括:

  • 不提供原始文件下载。
  • 不显示导出操作。
  • 不允许打印。
  • 仅在授权会话期间允许查看。
  • 防止用户直接访问存储位置。
  • 在文档打开时添加审计记录。

这些是独立的控制措施。确定哪些是必需的,并验证所选的 Doconut 产品、插件和许可证是否支持所需的查看器行为。

永远不要承诺可见文档无法被捕获。截图、相机、辅助工具、浏览器功能以及对显示像素的授权访问,使得绝对防止复制不切实际。


2. 保护原始文件

原始文档应保存在受保护的服务器端存储中。

  • 服务器生成的文档标识符
  • 受限的存储权限
  • 必要时的静态加密
  • 文档化的保留策略
  • 对上传、查看、导出和管理进行独立的权限设置

不要向客户端发送存储凭证、未受限制的文件路径或永久的公共 URL。


3. 对每个文档请求进行授权

在 ASP.NET Core 中,使用标准的身份验证和授权机制来保护查看器路由。

服务器应验证:

  1. 用户已通过身份验证。
  2. 文档存在。
  3. 用户被允许查看该特定文档。
  4. 请求的操作对用户的角色和当前工作流状态是被允许的。

[Authorize] 特性可以保护路由,而策略、声明或基于资源的授权可以对特定文档作出决策。

授权还必须覆盖返回文档数据、页面、导出、注释或打印输出的任何端点。仅保护初始页面会使其他路径暴露。


4. 将查看和下载权限分离

显式建模权限,而不是从隐藏按钮推断。

例如:

  • CanViewDocument
  • CanDownloadOriginal
  • CanExportDocument
  • CanPrintDocument
  • CanManageDocument

这些名称描述的是应用程序策略,而非 Doconut API。你的授权层应在服务器上评估它们,然后再执行相应的操作。

管理员可能拥有下载权限,而另一个已认证用户仅拥有查看权限。两个用户可以共享同一应用页面,却获得不同的授权功能。


5. 根据官方文档配置查看器

仅使用针对您应用中安装的确切 Doconut 版本在官方文档中记录的配置名称和集成步骤。

经验证的 Doconut 查看器页面 提供当前产品信息。 Doconut 下载和文档页面 提供安装资源和特定版本示例。

如果已安装的产品提供用于隐藏或禁用下载操作的受支持设置:

  1. 根据官方文档进行应用。
  2. 将其视为用户界面和工作流控制。
  3. 保持相关的服务器端点受保护。
  4. 测试未授权用户是否无法通过直接请求绕过它。

不要从无关文章中复制猜测的配置属性并假设它们受支持。


6. 将查看器集成置于服务层后面

专用的应用服务可以:

  • 解析已授权的文档
  • 通过批准的存储抽象打开它
  • 应用受支持的查看器配置
  • 释放流和临时资源
  • 记录已清理的审计事件
  • 向控制器返回安全错误

这使得 SDK 细节不出现在授权策略和呈现代码中。

标准的 .NET 类型,如 StreamFileStreamCancellationToken 以及依赖注入的服务,可构成应用的边界。请遵循 Doconut 的官方文档调用 SDK。


7. 实施深度防御

仅查看工作流可以包括:

  • 身份验证和资源级别授权
  • 网络和存储隔离
  • 短会话时长
  • 受限的导出和打印路径
  • 在支持且合适的情况下使用水印
  • 文档访问的审计事件
  • 速率限制和并发控制
  • 明确的保留和清理规则
  • 针对异常访问模式的安全监控

单一控制不足以保障安全。没有服务器保护的隐藏按钮尤其容易被绕过。


8. 记录访问而不泄露数据

有用的审计字段包括:

  • 应用文档标识符
  • 授权用户标识符
  • 时间戳
  • 请求的操作
  • 结果
  • 关联标识符
  • 已清理的拒绝或失败原因

避免记录:

  • 文档内容
  • 存储凭证
  • 访问令牌
  • 敏感 URL
  • 完整的服务器路径
  • 不必要的个人信息

根据审计日志的敏感性和保留要求对其进行保护。


9. 测试绕过 UI 的尝试

不要在确认工具栏按钮缺失后就停止。

测试仅查看用户是否能够:

  • 直接请求原始文件路径
  • 调用导出或打印路径
  • 更改文档标识符
  • 重用已过期的会话
  • 访问其他用户的文档
  • 在标记或网络响应中发现存储 URL
  • 触发泄露内部路径的详细错误
  • 在权限被撤销后仍保持访问

包括自动化授权测试和手动浏览器测试。


10. 设定准确的用户期望

解释该策略的作用:

  • 它限制应用提供的下载或导出工作流。
  • 它将访问限制在授权用户范围内。
  • 它可能记录查看事件。
  • 它将原始文件置于服务器控制之下。

同时解释它无法保证的事项:

  • 它无法在所有环境中阻止拍照或截图。
  • 它无法撤回已被看到并记住的信息。
  • 它不能取代合同、组织或终端安全控制。

这种区分使产品更可信,并帮助利益相关者为高度敏感的材料选择合适的控制措施。


验证清单

  • 查看和下载使用独立的服务器权限。
  • 每个文档请求执行资源级别授权。
  • 原始文件没有永久的公共 URL。
  • 查看器设置来源于已安装 Doconut 版本的文档。
  • 隐藏的操作拥有受保护的服务器端点。
  • 临时数据具有明确的清理流程。
  • 审计日志避免记录文档内容和机密信息。
  • 未授权的直接请求已通过测试覆盖。
  • 错误响应不泄露内部存储细节。
  • 产品文案不声称绝对防复制。

Doconut 的定位

Doconut 在 .NET 应用中提供嵌入式查看层。您的应用仍然负责身份、授权、权限、存储、保留、审计以及对“仅查看”承诺的真实性。

评估 Doconut .NET 文档查看器 SDK 与您的安全需求和代表性文档。使用 官方资源 获取受支持的配置,而不是依赖猜测的源代码。


结论

仅查看文档工作流是一种深度防御设计,而非布尔标记。保护原始文件、对每个请求进行授权、分离查看和下载权限、验证受支持的查看器设置、审计访问,并测试直接绕过界面的尝试。

有了这些控制,Doconut 可以提供嵌入式文档体验,而您的 ASP.NET 应用则在其周围强制执行安全策略。