Пакет SDK для файлов Microsoft Information Protection — обоснование действия для снижения метки конфиденциальности в файле (C#)

В этом кратком руководстве рассматривается обработка операции понижения ярлыка, когда политика ярлыков требует обоснования. Далее мы будем использовать интерфейс IFileHandler для изменения ярлыков файла. Дополнительные сведения см. в справочнике по API.

Предпосылки

Если вы еще не сделали этого, перед продолжением обязательно выполните следующие предварительные требования:

  • Завершите Краткое руководство: Установка и получение меток конфиденциальности (C#), чтобы создать начальное решение для Visual Studio, в котором перечислены метки конфиденциальности организации, а также настроены и прочитаны метки конфиденциальности в файл и из файла. В этом "Быстром руководстве: Понижение или удаление метки, требующей обоснования в C#" мы продолжаем от предыдущего.
  • По желанию: ознакомьтесь с File handlers concepts в концепциях MIP SDK.

Добавьте логику для установки более низкой метки защищенного файла.

Добавьте логику для задания метки конфиденциальности в файле с помощью объекта обработчика файлов.

  1. Откройте решение Visual Studio, созданное в предыдущем разделе "Краткое руководство. Установка и получение меток конфиденциальности(C#).

  2. В обозревателе решений откройте файл .cs в проекте, который содержит реализацию Main() метода. По умолчанию используется то же имя, что и проект, содержащий его, указанный во время создания проекта.

  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. Замените значения заполнителей в исходном коде следующими значениями:

    Замещающее поле Ценность
    <помеченный пониженного уровня вывод> Путь к выходному файлу, куда вы хотите сохранить измененный файл.
    <новый-идентификатор-ярлыка> Идентификатор шаблона, скопированный из выходных данных консоли в предыдущем Quickstart-е, например: bb7ed207-046a-4caf-9826-647cff56b990 Убедитесь, что его уровень чувствительности ниже, чем у ранее защищенной метки файла.

Создание и тестирование приложения

Создайте и протестируйте клиентское приложение.

  1. Используйте CTRL-SHIFT-B (Построить решение) для создания клиентского приложения. Если у вас нет ошибок сборки, используйте F5 (начать отладку) для запуска приложения.

  2. Если проект успешно собирается и запускается, приложение может запрашивать аутентификацию с помощью библиотеки аутентификации Microsoft (MSAL) каждый раз, когда пакет SDK вызывает ваш AcquireToken() метод. Если кэшированные учетные данные уже существуют, вам не будет предложено войти в систему и просмотреть список меток, а затем сведения о примененной метке и измененном файле.

  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 перед успешным удалением метки.