重新发布 (C++)

概述

本概述重点介绍 MIP SDK 中的重新发布是一个特定方案,应用程序必须允许用户编辑文件,但希望维护有关所有者、权限、内容密钥等的原始发布许可证信息。

模式可能如下所示:

  • 用户打开受保护的文档进行编辑。
  • 仅当用户被授予适当的权限时,才可编辑该文件。
  • 用户编辑并保存文档。

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

  • 创建指向目标文件的 mip::FileHandler
  • 存储由 mip::FileHandlerGetProtection() 方法公开的 mip::ProtectionHandler
  • 通过调用 AccessCheck() 方法检查用户是否具有 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::FileHandler 关联的文件中检索 mip::ProtectionHandler。 检索到 mip::ProtectionHandler 对象后,可以使用同一对象来验证文件的访问级别,解密文件,并在编辑文件后加密该文件。

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

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

重要

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

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

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

后续步骤