Microsoft 信息保护文件 SDK - 减少文件上的敏感度标签的操作理由 (C#)
本快速入门解决了在标签策略需要理由时处理降级标签操作的问题。这里,我们将使用 IFileHandler
接口来更改文件的标签。 有关更多详细信息,请参阅 API 参考。
先决条件
如果尚未完成,请确保先完成以下先决条件,然后再继续:
- 完成快速入门:设置/获取敏感度标签 (C#),构建一个入门级 Visual Studio 解决方案,以列出组织的敏感度标签,以及设置和读取文件的敏感度标签。 此“如何 - 降级/删除需要理由的标签 C#”快速入门建立在上一个快速入门的基础之上。
- 可选:查看 MIP SDK 概念中的文件处理程序概念。
添加逻辑以将较低的标签设置为受保护的文件
使用文件处理程序对象添加逻辑以在文件上设置敏感度标签。
打开在前面的“快速入门:设置/获取敏感度标签 (C#)”中创建的 Visual Studio 解决方案。
使用解决方案资源管理器,打开项目中包含
Main()
方法实现的 .cs 文件。 该文件默认与包含它的项目同名,该名称在项目创建期间指定。将先前快速入门中的
<label-id>
值更新为需要减少理由的敏感度标签。 在此快速入门运行期间,我们将首先设置此标签,然后在后续步骤中尝试通过代码片段减少它。在
Main()
主体的末尾,在Console.ReadKey()
下方和应用程序关闭块上方(你在上一个快速入门中离开的位置),插入以下代码。//Set paths and label ID string lowerInput = actualOutputFilePath; string lowerActualInput = lowerInput; string newLabelId = "<new-label-id>"; string lowerOutput = "<downgraded-labled-output>"; string lowerActualOutput = lowerOutput; //Create a file handler for that file var downgradeHandler = Task.Run(async () => await fileEngine.CreateFileHandlerAsync(lowerInput, lowerActualInput, true)).Result; //Set Labeling Options LabelingOptions options = new LabelingOptions() { AssignmentMethod = AssignmentMethod.Standard }; try { //Try to set new label downgradeHandler.SetLabel(fileEngine.GetLabelById(newLabelId), options, new ProtectionSettings()); } catch (Microsoft.InformationProtection.Exceptions.JustificationRequiredException) { //Request justification from user Console.Write("Please provide justification for downgrading a label: "); string justification = Console.ReadLine(); options.IsDowngradeJustified = true; options.JustificationMessage = justification; //Set new label downgradeHandler.SetLabel(fileEngine.GetLabelById(newLabelId), options, new ProtectionSettings()); } // Commit changes, save as outputFilePath var downgradedResult = Task.Run(async () => await downgradeHandler.CommitAsync(lowerActualOutput)).Result; // Create a new handler to read the labeled file metadata var commitHandler = Task.Run(async () => await fileEngine.CreateFileHandlerAsync(lowerOutput, lowerActualOutput, true)).Result; // Get the label from output file var newContentLabel = commitHandler.Label; Console.WriteLine(string.Format("Getting the new label committed to file: {0}", lowerOutput)); Console.WriteLine(string.Format("File Label: {0} \r\nIsProtected: {1}", newContentLabel.Label.Name, newContentLabel.IsProtectionAppliedFromLabel.ToString())); Console.WriteLine("Press a key to continue."); Console.ReadKey();
在 Main() 的末尾,找到在上一个快速入门中创建的应用程序关闭块,并添加下面的处理程序行以释放资源。
downgradeHandler = null; commitHandler = null;
将源代码中的占位符值替换为以下值:
占位符 值 <downgraded-labled-output> 要将修改后的文件保存到的输出文件路径。 <new-label-id> 从上一个快速入门中的控制台输出复制的模板 ID,例如: bb7ed207-046a-4caf-9826-647cff56b990
。 确保它的敏感度低于先前受保护的文件标签。
生成并测试应用
生成和测试客户端应用程序。
使用 CTRL-SHIFT-B(生成解决方案)生成客户端应用程序。 如果没有生成错误,请使用 F5(启动调试)运行应用程序。
如果项目成功生成并运行,则应用程序可能在 SDK 每次调用
AcquireToken()
方法时都会提示使用 Microsoft 身份验证库 (MSAL) 进行身份验证。 如果缓存的凭据已存在,系统不会提示你登录并查看标签列表,以及应用的标签和已修改文件的信息。
Personal : 73c47c6a-eb00-4a6a-8e19-efaada66dee6
Public : 73254501-3d5b-4426-979a-657881dfcb1e
General : da480625-e536-430a-9a9e-028d16a29c59
Confidential : 569af77e-61ea-4deb-b7e6-79dc73653959
Highly Confidential : 905845d6-b548-439c-9ce5-73b2e06be157
Press a key to continue.
Getting the label committed to file: c:\Test\Test_labeled.docx
Name: Confidential
IsProtected: True
Press any key to continue . . .
Please provide justification for downgrading a label: Lower label approved.
Getting the new label committed to file: c:\Test\Test_downgraded.docx
File Label: General
IsProtected: False
Press a key to continue.
请注意,类似的方法也适用于 DeleteLabel()
操作,以防从文件中删除的标签需要根据标签策略要求的理由。DeleteLabel()
函数会引发 JustificationRequiredException
异常,并且在成功删除标签之前,应在异常处理中将 IsDowngradeJustified
标志设置为 true。