Пакет SDK для файлов Microsoft Information Protection: действие обоснования для понижения уровня у метки конфиденциальности на файле (C#)
В этом кратком руководстве показано, как понизить уровень конфиденциальности метки, когда политика в отношении меток требует обоснования. Здесь используется интерфейс IFileHandler
для изменения метки на файле. Дополнительные сведения см. в справочнике по API.
Необходимые компоненты
Прежде чем продолжить, выполните следующие предварительные требования:
- Сначала завершите Краткое руководство. Установка и получение меток конфиденциальности (C#), в котором создается начальное решение Visual Studio, позволяющее устанавливать метки конфиденциальности на файл и получать сведения о них. Это краткое руководство основано на предыдущем руководстве.
- При необходимости изучите основные понятия статьи Обработчики файлов в пакете SDK для MIP.
Добавление логики для установки на защищенном файле метки более низкого уровня
Добавьте логику для установки метки конфиденциальности с помощью объекта обработчика файлов.
Откройте решение Visual Studio, созданное при изучении предыдущей статьи "Краткое руководство: Установка и получение меток конфиденциальности (C#)".
С помощью Обозревателя решений откройте в проекте CS-файл, содержащий реализацию метода
Main()
. По умолчанию он имеет то же имя, что и содержащий его проект, который вы указали при создании проекта.Укажите значение
<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> Идентификатор шаблона, скопированный из выходных данных консоли в предыдущем кратком руководстве, например: bb7ed207-046a-4caf-9826-647cff56b990
. Убедитесь, что уровень конфиденциальности этой метки ниже, чем у предыдущей метки на защищенном файле.
Создание и тестирование приложения
Выполните сборку клиентского приложения и протестируйте его.
Нажмите клавиши CTRL+SHIFT+B (Собрать решение), чтобы выполнить сборку клиентского приложения. Если ошибок сборки нет, нажмите клавишу F5 (Начать отладку), чтобы запустить приложение.
Если проект успешно создан и запущен, приложение может запрашивать проверку подлинности через Библиотеку проверки подлинности Майкрософт (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 при обработке исключений, чтобы метка была успешно удалена.