SDK de arquivo de proteção de informações da Microsoft – justificativa de ação para reduzir um rótulo de confidencialidade em um arquivo (C#)
Este início rápido aborda o tratamento de uma operação de rótulo de downgrade quando a política de rótulo exige justificativa. Aqui, usaremos a interface IFileHandler
para alterar os rótulos de um arquivo. Para obter mais detalhes, confira a Referência de API.
Pré-requisitos
Conclua os seguintes pré-requisitos antes de continuar, caso ainda não tenha feito isso:
- Conclua o Início Rápido: definir/obter rótulos de confidencialidade (C#), que cria uma solução inicial do Visual Studio para listar os rótulos de confidencialidade de uma organização a fim de definir e ler rótulos de confidencialidade para/de um arquivo. Este Início Rápido "Como fazer downgrade/remover um rótulo que precisa de uma justificativa C#" é baseado no anterior.
- Opcionalmente: examine os conceitos de Manipuladores de arquivos no SDK da PIM.
Adicionar lógica para definir um rótulo inferior a um arquivo protegido
Adicione lógica para definir um rótulo de confidencialidade em um arquivo usando o objeto Manipulador de arquivo.
Abra a solução do Visual Studio criada no "Início Rápido: definir/obter rótulos de confidencialidade (C#)" anterior.
Usando o Gerenciador de Soluções, abra o arquivo .cs no projeto que contém a implementação do método
Main()
. Ele usa como padrão o mesmo nome que o projeto em que está contido, que você especificou durante a criação do projeto.Atualize o valor
<label-id>
do início rápido anterior para um rótulo de confidencialidade que exija justificativa para rebaixamento. No decorrer deste início rápido, definiremos o rótulo primeiro e, depois disso, tentaremos rebaixá-lo por meio de snippets de código em outras etapas.No final do corpo de
Main()
, abaixo deConsole.ReadKey()
e acima do bloco de desligamento do aplicativo (onde você parou no Início Rápido), insira o código a seguir.//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();
No final de Main(), localize o bloco de desligamento do aplicativo criado no início rápido anterior e adicione as linhas do manipulador abaixo para liberar recursos.
downgradeHandler = null; commitHandler = null;
Substitua os valores de espaço reservado no código-fonte usando os seguintes valores:
Espaço reservado Valor <downgraded-labled-output> O caminho do arquivo de saída no qual você deseja salvar o arquivo modificado. <new-label-id> Uma ID de modelo, copiada da saída do console no Início Rápido anterior. Por exemplo: bb7ed207-046a-4caf-9826-647cff56b990
. Garanta que ele tenha menos confidencialidade do que o rótulo de arquivo protegido anteriormente.
Criar e testar o aplicativo
Crie e teste o aplicativo cliente.
Use CTRL-SHIFT-B (Compilar solução) para compilar o aplicativo cliente. Se não houver erros de build, use F5 (Iniciar depuração) para executar o aplicativo.
Se seu projeto for compilado e executado com êxito, o aplicativo poderá solicitar autenticação usando a MSAL (Biblioteca de Autenticação da Microsoft) sempre que o SDK chamar seu método
AcquireToken()
. Se já houver credenciais armazenadas em cache, não será solicitado que você entre e veja a lista de rótulos, seguida pelas informações sobre o rótulo aplicado e o arquivo modificado.
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.
Observe que uma abordagem semelhante também se aplica à operação DeleteLabel()
, caso o rótulo que está sendo excluído de um arquivo exija uma justificativa de acordo com a política do rótulo.A função DeleteLabel()
lança uma exceção JustificationRequiredException
, e o sinalizador IsDowngradeJustified
deve ser definido como verdadeiro no tratamento de exceção antes de excluir um rótulo com êxito.