Поделиться через


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

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

Необходимые компоненты

Прежде чем продолжить, выполните следующие предварительные требования:

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

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

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

    Заполнитель Значение
    <downgraded-labled-output> Путь к выходному файлу, в который вы хотите сохранить измененный файл.
    <new-label-id> Идентификатор шаблона, скопированный из выходных данных консоли в предыдущем кратком руководстве, например: bb7ed207-046a-4caf-9826-647cff56b990. Убедитесь, что уровень конфиденциальности этой метки ниже, чем у предыдущей метки на защищенном файле.

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

Выполните сборку клиентского приложения и протестируйте его.

  1. Нажмите клавиши CTRL+SHIFT+B (Собрать решение), чтобы выполнить сборку клиентского приложения. Если ошибок сборки нет, нажмите клавишу F5 (Начать отладку), чтобы запустить приложение.

  2. Если проект успешно создан и запущен, приложение может запрашивать проверку подлинности через Библиотеку проверки подлинности Майкрософт (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 при обработке исключений, чтобы метка была успешно удалена.