SDK do 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 guia de início rápido aborda o tratamento de uma operação de rótulo de downgrade quando a política de rótulos requer justificação. Aqui, usaremos IFileHandler
interface para alterar os rótulos de um arquivo. Para obter mais detalhes, consulte a referência da API.
Pré-requisitos
Se ainda não o fez, certifique-se de que preenche os seguintes pré-requisitos antes de continuar:
- Guia de início rápido completo : definir/obter rótulos de sensibilidade (C#) que cria uma solução inicial do Visual Studio para listar os rótulos de sensibilidade de uma organização e definir e ler rótulos de sensibilidade de/para um arquivo. Este Guia de início rápido "Como fazer downgrade/remover um rótulo que precisa de uma justificativa em C#" baseia-se no anterior.
- Opcionalmente: revise os conceitos de manipuladores de arquivos nos conceitos do MIP SDK.
Adicionar lógica para definir um rótulo inferior a um arquivo protegido
Adicione lógica para definir um rótulo de sensibilidade em um arquivo, usando o objeto File handler.
Abra a solução Visual Studio que você criou no anterior "Guia de início rápido: definir/obter rótulos de sensibilidade (C#).
Usando o Gerenciador de Soluções, abra o arquivo de .cs em seu projeto que contém a implementação do
Main()
método. O padrão é o mesmo nome do projeto que o contém, que você especificou durante a criação do projeto.Atualize o
<label-id>
valor do início rápido anterior para um rótulo de sensibilidade que exija uma justificativa para a redução. Durante essa execução de início rápido, definiremos esse rótulo primeiro e, em seguida, tentaremos reduzi-lo por meio de trechos de código em etapas adicionais.No final do corpo, abaixo
Console.ReadKey()
e acima do bloco de desligamentoMain()
do aplicativo (onde você parou no Guia de início rápido anterior), 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 abaixo as linhas do manipulador para liberar recursos.
downgradeHandler = null; commitHandler = null;
Substitua os valores de espaço reservado no código-fonte usando os seguintes valores:
Marcador de Posição Valor <downgraded-labled-output> O caminho do arquivo de saída no qual você deseja salvar o arquivo modificado. <novo-label-id> Um ID de modelo, copiado da saída do console no Guia de início rápido anterior, por exemplo: bb7ed207-046a-4caf-9826-647cff56b990
. Verifique se ele tem menor sensibilidade do que o rótulo do arquivo protegido anteriormente.
Crie e teste o aplicativo
Crie e teste seu aplicativo cliente.
Use CTRL-SHIFT-B (Build Solution) para criar seu aplicativo cliente. Se você não tiver erros de compilação, use F5 (Iniciar depuração) para executar seu aplicativo.
Se o projeto for compilado e executado com êxito, o aplicativo poderá solicitar autenticação usando a Microsoft Authentication Library (MSAL) sempre que o SDK chamar seu
AcquireToken()
método. Se as credenciais em cache já existirem, você não será solicitado a entrar e ver 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 à DeleteLabel()
operação, caso o rótulo que está sendo excluído de um arquivo exija uma justificativa de acordo com a política de rótulos.DeleteLabel()
function lança uma JustificationRequiredException
exceção e IsDowngradeJustified
o sinalizador deve ser definido como true no tratamento de exceções antes de excluir um rótulo com êxito.