Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En el SDK de MIP, el perfil es la clase raíz para todas las operaciones. Antes de usar cualquiera de las funcionalidades del SDK de archivos, se debe crear un FileProfile para que todas las operaciones futuras se realicen mediante ese perfil o mediante otros objetos agregados al perfil.
Hay algunos requisitos previos de código que deben cumplirse antes de crear instancias de un perfil:
MipContextse ha creado y almacenado en un objeto accesible para el objetomip::FileProfile.ConsentDelegateImplimplementamip::ConsentDelegate.- La aplicación se ha registrado en Microsoft Entra ID y el Id. de cliente está codificado de forma rígida en los archivos de configuración o la aplicación.
- Se ha implementado correctamente una clase que hereda de
mip::FileProfile::Observer.
Carga de un perfil
Con los elementos ProfileObserver y ConsentDelegateImpl definidos, ya se pueden crear instancias de mip::FileProfile. La creación del objeto mip::FileProfile requiere que [mip::MipContext] contenga y mip::FileProfile::Settings almacene toda la información de configuración sobre FileProfile.
Parámetros de FileProfile::Settings
El constructor FileProfile::Settings acepta cinco parámetros, que se enumeran a continuación:
std::shared_ptr<MipContext>: El objetomip::MipContextque fue inicializado para almacenar los datos de la aplicación, la ruta del estado, etc.mip::CacheStorageType: define cómo almacenar el estado: en la memoria, en el disco o en el disco con cifrado.std::shared_ptr<mip::ConsentDelegate>: puntero compartido de la clasemip::ConsentDelegate.std::shared_ptr<mip::FileProfile::Observer> observer: Un puntero compartido a la implementación del perfilObserver(enPolicyProfile,ProtectionProfileyFileProfile).
Los ejemplos siguientes muestran cómo crear el objeto profileSettings mediante el almacenamiento local para el almacenamiento de estado, así como para el almacenamiento solo en memoria.
Almacenamiento del estado solo en memoria
mip::ApplicationInfo appInfo {clientId, "APP NAME", "1.2.3" };
std::shared_ptr<mip::MipConfiguration> mipConfiguration = std::make_shared<mip::MipConfiguration>(mAppInfo,
"mip_data",
mip::LogLevel::Trace,
false);
std::shared_ptr<mip::MipContext> mMipContext = mip::MipContext::Create(mipConfiguration);
FileProfile::Settings profileSettings(
mMipContext, // mipContext object
mip::CacheStorageType::InMemory, // use in memory storage
std::make_shared<ConsentDelegateImpl>(), // new consent delegate
std::make_shared<FileProfileObserverImpl>()); // new protection profile observer
Leer/escribir la configuración del perfil desde la ruta de almacenamiento en el disco
El siguiente fragmento de código indicará a FileProfile que almacene todos los datos de estado de la aplicación en ./mip_app_data.
mip::ApplicationInfo appInfo {clientId, "APP NAME", "1.2.3" };
std::shared_ptr<mip::MipConfiguration> mipConfiguration = std::make_shared<mip::MipConfiguration>(mAppInfo,
"mip_data",
mip::LogLevel::Trace,
false);
std::shared_ptr<mip::MipContext> mMipContext = mip::MipContext::Create(mipConfiguration);
FileProfile::Settings profileSettings(
mMipContext, // mipContext object
mip::CacheStorageType::OnDisk, // use on disk storage
std::make_shared<ConsentDelegateImpl>(), // new consent delegate
std::make_shared<FileProfileObserverImpl>()); // new protection profile observer
Carga del perfil
Con cualquiera de los detalles del enfoque anterior, use el patrón promesa/futuro para cargar el FileProfile.
auto profilePromise = std::make_shared<std::promise<std::shared_ptr<FileProfile>>>();
auto profileFuture = profilePromise->get_future();
FileProfile::LoadAsync(profileSettings, profilePromise);
Si hemos cargado un perfil y esa operación se ha completado correctamente, ProfileObserver::OnLoadSuccess, se llama a la implementación de mip::FileProfile::Observer::OnLoadSuccess. El objeto o el puntero de excepción resultantes, así como el contexto, se pasan en forma de parámetros a la función. El contexto es un puntero dirigido al std::promise que creamos para controlar la operación asincrónica. La función simplemente asigna el valor de la promesa al objeto FileProfile que se pasó como primer parámetro. Cuando la función principal usa Future.get(), el resultado se puede almacenar en un nuevo objeto.
//get the future value and store in profile.
auto profile = profileFuture.get();
Juntándolo todo
Después de haber implementado completamente los observadores y el delegado de autenticación, ahora es posible cargar completamente un perfil. En el fragmento de código siguiente se presupone que ya se incluyen todos los encabezados necesarios.
int main()
{
const string userName = "MyTestUser@contoso.com";
const string password = "P@ssw0rd!";
const string clientId = "MyClientId";
mip::ApplicationInfo appInfo {clientId, "APP NAME", "1.2.3" };
std::shared_ptr<mip::MipConfiguration> mipConfiguration = std::make_shared<mip::MipConfiguration>(mAppInfo,
"mip_data",
mip::LogLevel::Trace,
false);
std::shared_ptr<mip::MipContext> mMipContext = mip::MipContext::Create(mipConfiguration);
FileProfile::Settings profileSettings(
mMipContext, // MipContext object
mip::CacheStorageType::OnDisk, // use on disk storage
std::make_shared<ConsentDelegateImpl>(), // new consent delegate
std::make_shared<FileProfileObserverImpl>()); // new file profile observer
auto profilePromise = std::make_shared<promise<shared_ptr<FileProfile>>>();
auto profileFuture = profilePromise->get_future();
FileProfile::LoadAsync(profileSettings, profilePromise);
auto profile = profileFuture.get();
}
El resultado final es que hemos cargado correctamente el perfil y lo hemos almacenado en el objeto denominado profile.
Pasos siguientes
Ahora que hemos agregado el perfil, el siguiente paso es agregar un motor al perfil.