重新发布 (C++)

概述

本概述重点介绍在 MIP SDK 中重新发布是当应用程序必须允许用户编辑文件,但想要保留有关所有者、权限、内容密钥等的原始发布许可证信息时遇到的特定方案。

模式可能如下所示:

  • 用户打开受保护的文档进行编辑。
  • 只有当用户被授予了相应权限时,才能编辑文件。
  • 用户编辑并保存文档。

完成此任务的 MIP SDK 伪代码可能如下所示:

  • 创建 mip::FileHandler 指向目标文件的 。
  • 存储 mip::ProtectionHandlermip::FileHandler 方法公开的 GetProtection()
  • 通过调用 方法检查用户是否具有 EDIT 权限。
  • 使用 mip::FileHandlerGetDecryptedTemporaryFileAsync()GetDecryptedTemporaryStreamAsync() 获取临时解密的输出。
  • 编辑临时文件或流式传输内容并保存。
  • 创建指向 mip::FileHandler 临时文件的新实例,并使用 SetProtection() 方法,提供存储 mip::ProtectionHandler 为 参数的 。
  • 提交更改。

使用原始文件的 ,将在编辑的文档上维护所有者、内容 mip::ProtectionHandler ID、内容密钥等。 此重新发布方案要求应用程序保留对原始 的引用 mip::ProtectionHandler

实现

如前面所述,类公开用于读取、写入和 mip::FileHandler 删除标签和保护信息的方法。 有关支持的操作的完整列表,请查看 API 参考

此方案使用以下方法 mip::FileHandler

  • GetProtection()
  • CommitAsync()
  • GetDecryptedTemporaryFileAsync()
  • SetProtection()

该方案还使用 ,它公开用于加密和解密受保护流和缓冲区、执行访问检查、获取发布许可证以及从受保护信息获取 mip::ProtectionHandler 属性的函数。 AccessCheck()方法将用于验证用户是否具有编辑文件的权利。

若要成功完成此重新保护方案,请查看"下一步"下的"快速入门",并确保应用程序生成并可以成功列出标签。

从 文件创建保护处理程序并解密文件

mip::ProtectionHandler 公开用于加密和解密受保护流和缓冲区、执行访问检查、获取发布许可证以及从受保护信息获取属性的函数。 mip::ProtectionHandler 对象是通过提供 ProtectionDescriptor 或序列化的发布许可证构造的。 对于此用例,我们将隐式使用发布许可证,因为解密已保护的内容或保护已构造许可证的内容时,将使用发布许可证。

mip::FileHandler 公开名为 GetProtection() 的方法,该方法从 mip::ProtectionHandler 与 关联的 文件检索 mip::FileHandler 。 检索对象后,可以使用相同的方法验证用户对文件的访问级别,解密该文件,并在编辑文件后 mip::ProtectionHandler 加密该文件。

mip::ProtectionHandler的 用于验证用户对文件具有特定权限,并返回布尔响应, AccessCheck() 具体取决于结果。 例如,若要验证用户是否具有编辑权限,请调用方法以传递值"EDIT"。 如果结果为 true,则允许用户编辑文件。 验证 EDIT 权限后,使用 检索 GetDecryptedTemporaryFileAsync() 临时解密的文件。

有关各种用户权限的更多详细信息,请参阅 Azure 信息保护的用户权限

重要

访问检查和强制执行完全由应用程序开发人员负责。 具有 VIEW 权限的用户能够解密受保护的信息。 应用程序负责验证授予用户的权限集,以及通过信息保护控件(例如阻止复制、编辑或截取屏幕截图)强制实施这些权限。 未能正确实施保护控制可能会导致敏感信息泄露。

通过应用保护来保存并发布编辑的文件

解密文件后,可以编辑该文件。 编辑操作完成后,可以提交更改。 使用 IFileHandler 上述临时文件创建 对象来处理已提交的文件。 然后,可以使用从原始文件检索到的对象 IProtectionHandler 保护临时文件。

下一步