Partilhar via


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:

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.

  1. Abra a solução Visual Studio que você criou no anterior "Guia de início rápido: definir/obter rótulos de sensibilidade (C#).

  2. 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.

  3. 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.

  4. No final do corpo, abaixo Console.ReadKey() e acima do bloco de desligamento Main() 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();
    
    
  5. 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;
    
  6. 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.

  1. 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.

  2. 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.