Microsoft 信息保护文件 SDK - 减少文件上的敏感度标签的操作理由 (C#)

本快速入门解决了在标签策略需要理由时处理降级标签操作的问题。这里,我们将使用 IFileHandler 接口来更改文件的标签。 有关更多详细信息,请参阅 API 参考

先决条件

如果尚未完成,请确保先完成以下先决条件,然后再继续:

  • 完成快速入门:设置/获取敏感度标签 (C#),构建一个入门级 Visual Studio 解决方案,以列出组织的敏感度标签,以及设置和读取文件的敏感度标签。 此“如何 - 降级/删除需要理由的标签 C#”快速入门建立在上一个快速入门的基础之上。
  • 可选:查看 MIP SDK 概念中的文件处理程序概念

添加逻辑以将较低的标签设置为受保护的文件

使用文件处理程序对象添加逻辑以在文件上设置敏感度标签。

  1. 打开在前面的“快速入门:设置/获取敏感度标签 (C#)”中创建的 Visual Studio 解决方案。

  2. 使用解决方案资源管理器,打开项目中包含 Main() 方法实现的 .cs 文件。 该文件默认与包含它的项目同名,该名称在项目创建期间指定。

  3. 将先前快速入门中的 <label-id> 值更新为需要减少理由的敏感度标签。 在此快速入门运行期间,我们将首先设置此标签,然后在后续步骤中尝试通过代码片段减少它。

  4. 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();
    
    
  5. 在 Main() 的末尾,找到在上一个快速入门中创建的应用程序关闭块,并添加下面的处理程序行以释放资源。

    downgradeHandler = null;
    commitHandler = null;
    
  6. 将源代码中的占位符值替换为以下值:

    占位符
    <downgraded-labled-output> 要将修改后的文件保存到的输出文件路径。
    <new-label-id> 从上一个快速入门中的控制台输出复制的模板 ID,例如:bb7ed207-046a-4caf-9826-647cff56b990。 确保它的敏感度低于先前受保护的文件标签。

生成并测试应用

生成和测试客户端应用程序。

  1. 使用 CTRL-SHIFT-B(生成解决方案)生成客户端应用程序。 如果没有生成错误,请使用 F5(启动调试)运行应用程序。

  2. 如果项目成功生成并运行,则应用程序可能在 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。