SDK de archivo de Microsoft Information Protection: justificación de la acción para bajar de nivel una etiqueta de confidencialidad en un archivo (C#)

Este inicio rápido aborda la forma de tratar una operación de degradado de etiqueta cuando la directiva de etiquetas requiere justificación. Aquí, se usará la interfaz IFileHandler para cambiar las etiquetas de un archivo. Para obtener más información, consulte Referencia de la API.

Requisitos previos

Si todavía no lo ha hecho, complete los siguientes requisitos previos antes de continuar:

Incorporación de la lógica para establecer una etiqueta de nivel inferior en un archivo protegido

Agregue lógica para establecer una etiqueta de confidencialidad en un archivo, mediante el objeto de controlador de archivos.

  1. Abra la solución de Visual Studio que ha creado en el artículo anterior "Inicio rápido: Establecimiento u obtención de etiquetas de confidencialidad (C#)".

  2. Con el Explorador de soluciones, abra el archivo .cs del proyecto que contiene la implementación del método Main(). De manera predeterminada, tiene el mismo nombre que el proyecto que lo contiene, que especificó al crear el proyecto.

  3. Actualice el valor <label-id> del inicio rápido anterior a una etiqueta de confidencialidad que requiera justificación para reducir su nivel. Durante la ejecución de este inicio rápido, estableceremos esta etiqueta en primer lugar y, a continuación, intentaremos reducirla a través de fragmentos de código en pasos adicionales.

  4. Hacia la parte final del cuerpo de Main(), debajo de Console.ReadKey() y encima del bloque de apagado de la aplicación (donde lo ha dejado en el inicio rápido anterior), inserte el código siguiente.

    //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. Hacia el final de Main(), busque el bloque de apagado de la aplicación creado en el inicio rápido anterior y agregue la líneas de controlador siguientes para liberar recursos.

    downgradeHandler = null;
    commitHandler = null;
    
  6. Reemplace los valores de marcador de posición del código fuente por los valores siguientes:

    Marcador Valor
    <downgraded-labled-output> La ruta de acceso de archivo de salida en la que desea guardar el archivo modificado.
    <new-label-id> Identificador de plantilla, copiado de la salida de la consola en el inicio rápido anterior, por ejemplo: bb7ed207-046a-4caf-9826-647cff56b990. Asegúrese de que tiene una sensibilidad inferior a la etiqueta de archivo protegida anteriormente.

Compilar y probar la aplicación

Compile y pruebe la aplicación cliente.

  1. Presione CTRL-MAYÚS-B (Compilar solución) para compilar la aplicación cliente. Si no hay errores de compilación, presione F5 (Iniciar depuración) para ejecutar la aplicación.

  2. Si el proyecto se compila y ejecuta correctamente, es posible que la aplicación solicite autenticación mediante la biblioteca de autenticación de Microsoft (MSAL) cada vez que el SDK llame al método AcquireToken(). Si ya existen credenciales en caché, no se le pedirá que inicie sesión y verá la lista de etiquetas, seguida de la información sobre la etiqueta aplicada y el archivo 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.

Tenga en cuenta que, en caso de que la etiqueta que se elimina de un archivo requiera una justificación según la directiva de etiqueta, también se aplica un enfoque similar a la operación DeleteLabel().La función DeleteLabel() produce una excepción JustificationRequiredException y la marca IsDowngradeJustified debe establecerse en true en el control de excepciones para que una etiqueta se pueda eliminar correctamente.