Microsoft Information Protection SDK: conceptos del motor sdk de archivo

El SDK de archivo mip proporciona una interfaz para todas las operaciones que se realizan en mip::FileEngine nombre de una identidad especificada. Se agregará un motor para cada usuario que inicia sesión en la aplicación y todas las operaciones que realice el motor se realizarán en el contexto de esa identidad.

Tiene FileEngine dos responsabilidades principales: Enumerar etiquetas para un usuario autenticado y crear controladores de archivos para realizar operaciones de archivo en nombre del usuario.

  • mip::FileEngine
  • ListSensitivityLabels(): Obtiene la lista de etiquetas del motor cargado.
  • CreateFileHandler(): Crea una para un archivo o una transmisión mip::FileHandler específicos.

Agregar un motor de archivos

Como se indica en los objetos Perfil y Motor,un motor puede tener dos estados: o LOADED . Si no es uno de esos dos estados, no existe. Para crear y cargar un estado, solo es necesario realizar una sola llamada a FileProfile::LoadAsync . Si el motor ya existe en el estado de caché, será LOADED . Si no existe, será CREATED y LOADED . CREATED implica que la aplicación tiene toda la información del servicio necesario para cargar el motor. LOADED implica que todas las estructuras de datos necesarias para aprovechar el motor se han creado en la memoria.

Crear un motor de archivos Configuración

De forma similar a un perfil, el motor también requiere un objeto de mip::FileEngine::Settings configuración. Este objeto almacena el identificador único del motor, la implemenatation, los datos de cliente personalizables que se pueden usar para la depuración o telemetría y, opcionalmente, la mip::AuthDelegate configuración regional.

Aquí creamos un FileEngine::Settings objeto llamado FileEngine::Settings con la identidad del usuario de la aplicación.

FileEngine::Settings engineSettings(
  mip::Identity(mUsername), // mip::Identity.
  authDelegateImpl,         // auth delegate object
  "",                       // Client data. Customizable by developer, stored with engine.
  "en-US",                  // Locale.
  false);                   // Load sensitive information types for driving classification.

Al crear engineSettings de esta manera, es importante establecer explícitamente un engineId único a través de:

engineSettings.SetEngineId(engineId);

Usar el nombre de usuario o el correo electrónico ayuda a asegurarse de que el mismo motor se carga cada vez que el usuario usa el servicio o la aplicación.

También es válido proporcionar un id. de motor personalizado:

FileEngine::Settings engineSettings(
  "myEngineId",     // string
  authDelegateImpl, // auth delegate object
  "",               // Client data in string format. Customizable by developer, stored with engine.
  "en-US",          // Locale. Default is en-US
  false);           // Load sensitive information types for driving classification. Default is false.

Como práctica recomendada, el primer parámetro, , debe ser algo que permita que el motor se conecte fácilmente id al usuario asociado. Algo como dirección de correo electrónico, UPN o GUID de objeto AAD garantizaría que el id. es único y se puede cargar desde el estado local sin llamar al servicio.

Agregar el motor de archivos

Para agregar el motor, volveremos al patrón de promesa/futuro usado para cargar el perfil. En lugar de crear la promesa mip::FileProfile para , se crea con mip::FileEngine .

  //auto profile will be std::shared_ptr<mip::FileProfile>
  auto profile = profileFuture.get();

  // Instantiate the AuthDelegate implementation.
  auto authDelegateImpl = std::make_shared<sample::auth::AuthDelegateImpl>(appInfo, userName, password);

  //Create the FileEngine::Settings object
  FileEngine::Settings engineSettings("UniqueID", authDelegateImpl, "");

  //Create a promise for std::shared_ptr<mip::FileEngine>
  auto enginePromise = std::make_shared<std::promise<std::shared_ptr<mip::FileEngine>>>();

  //Instantiate the future from the promise
  auto engineFuture = enginePromise->get_future();

  //Add the engine using AddEngineAsync, passing in the engine settings and the promise
  profile->AddEngineAsync(engineSettings, enginePromise);

  //get the future value and store in std::shared_ptr<mip::FileEngine>
  auto engine = engineFuture.get();

El resultado final del código anterior es que el motor del usuario autenticado se agregará al perfil.

Etiquetas de confidencialidad de lista

Con el motor agregado, ahora es posible enumerar todas las etiquetas de confidencialidad disponibles para el usuario autenticado llamando engine->ListSensitivityLabels() .

ListSensitivityLabels() capturará la lista de etiquetas y atributos de dichas etiquetas para un usuario específico del servicio. El resultado se almacena en un vector de std::shared_ptr<mip::Label> .

Más información aquí sobre .

ListSensitivityLabels()

std::vector<shared_ptr<mip::Label>> labels = engine->ListSensitivityLabels();

O bien, simplificada:

auto labels = engine->ListSensitivityLabels();

Imprimir los nombres es una forma sencilla de mostrar que hemos retirado correctamente la directiva del servicio y hemos podido obtener las etiquetas. Para aplicar la etiqueta, se requiere el identificador de etiqueta. El código debajo itera por todas las etiquetas, mostrando la y la de cada nameid etiqueta principal e secundaria.

//Iterate through all labels in the vector
for (const auto& label : labels) {
  //Print label name and GUID
  cout << label->GetName() << " : " << label->GetId() << endl;

  //Print child label name and GUID
  for (const auto& child : label->GetChildren()) {
    cout << "->  " << child->GetName() <<  " : " << child->GetId() << endl;
  }
}

La colección de devueltos por puede usarse para mostrar todas las etiquetas disponibles para el usuario y, después, cuando se selecciona, use el id. para aplicar etiquetas mip::LabelGetSensitivityLabels() a un archivo.

Pasos siguientes

Ahora que el perfil está cargado, el motor agregado y tenemos etiquetas, podemos agregar un controlador para empezar a leer, escribir o quitar etiquetas de archivos. Vea Controladores de archivos en el SDK de MIP.