SDK de Microsoft Information Protection: permisos definidos por el usuario

El SDK de Microsoft Information Protection admite dos tipos principales de permisos controlados por etiquetas: basados en plantillas y definidos por el usuario.

  • Permisos basados en plantillas: El administrador de etiquetas define estos derechos en el Microsoft Purview portal. Estas etiquetas se administran de forma centralizada y los cambios de configuración afectan a los usuarios que ya tienen copias de los archivos. Por ejemplo, si el administrador quita un usuario de la lista de usuarios autorizados, ese usuario ya no tiene acceso a los datos protegidos la próxima vez que intente capturar una licencia.

  • Permisos definidos por el usuario: el usuario final o la aplicación define estos derechos en el momento del etiquetado. Pase permisos al SDK de MIP en forma de una colección de asignaciones de usuarios a roles o usuarios a derechos. El SDK de MIP escribe estos derechos en la licencia de publicación del documento protegido. A diferencia de los permisos basados en plantillas, no puede administrar ni modificar centralmente estos derechos después de compartir sin acceso directo ni modificación del documento.

Usuarios, derechos y roles

Dado que el usuario define los derechos en el momento del etiquetado, la aplicación debe proporcionar una interfaz para que el usuario o el servicio escriban direcciones de correo electrónico y derechos o roles. Para configurar el acceso, pase una colección de UserRoles objetos o UserRights que definan quién tiene el nivel de acceso a los documentos.

// Create a List<string> of the first set of permissions. 
List<string> users = new List<string>()
{
    "alice@contoso.com",
    "bob@contoso.com"
};

// Create a List<string> of the Rights the above users should have. 
List<string> rights = new List<string>()
{
    Rights.View,
    Rights.Edit                
};

// Create a UserRights object containing the defined users and rights.
UserRights userRights = new UserRights(users, rights);

// Add them to a new List<UserRights>
List<UserRights> userRightsList = new List<UserRights>()
{
    userRights
};

El resultado es un List<UserRights> conjunto que especifica que tanto Alice como Bob tienen permisos de VER y EDITAR sobre el archivo protegido. Para agregar más usuarios con un conjunto diferente de permisos, repita el proceso para crear un segundo UserRights objeto, pase los nuevos usuarios y permisos y, a continuación, agréguelo a la List<UserRights> colección llamando a userRightsList.Add(userRights2).

El mismo patrón se aplica a UserRoles. Para implementarlo, reemplace los derechos por roles y cree una List<UserRoles> colección.

Protección de un dominio

La aplicación de permisos definidos por el usuario para un dominio requiere un prefijo de correo conocido y el dominio de destino como dirección de correo. Esa dirección parece AllStaff-7184AB3F-CCD1-46F3-8233-3E09E9CF0E66@contoso.com.

En la aplicación, los usuarios deben poder especificar un dominio, como contoso.com o fabrikam.com. Cuando la aplicación crea el descriptor de protección, antepone AllStaff-7184AB3F-CCD1-46F3-8233-3E09E9CF0E66@ al sufijo de dominio.

Este grupo conocido también es cómo se conceden derechos a todos los usuarios autenticados de una organización. El AllStaff-7184AB3F-CCD1-46F3-8233-3E09E9CF0E66@ grupo contiene todos los usuarios del inquilino de Microsoft Entra especificado, por lo que es el equivalente más cercano al grupo CUALQUIERA de Active Directory Rights Management Services (AD RMS). El ámbito siempre es de un único inquilino: no existe ninguna identidad entre distintos inquilinos que conceda derechos a cualquier usuario autenticado en cualquier lugar, por lo que debe añadir una entrada AllStaff-...@domain independiente para cada organización que quiera incluir. Para obtener más información, consulte Configurar los derechos de uso para Azure Information Protection.

En el ejemplo siguiente, el usuario especifica alice@contoso.com y todos los Fabrikam.com como destinatarios válidos.

// Create a List<string> of the first set of permissions. 
List<string> users = new List<string>()
{
    "alice@contoso.com",
    "AllStaff-7184AB3F-CCD1-46F3-8233-3E09E9CF0E66@fabrikam.com"
};

// Create a List<string> of the Rights the above users should have. 
List<string> rights = new List<string>()
{
    Rights.View,
    Rights.Edit                
};

// Create a UserRights object containing the defined users and rights.
UserRights userRights = new UserRights(users, rights);

// Add them to a new List<UserRights>
List<UserRights> userRightsList = new List<UserRights>()
{
    userRights
};

Aplicar protección

Para establecer la protección, cree un ProtectionDescriptor a partir del List<UserRights> objeto o List<UserRoles> y, a continuación, pase ese descriptor a FileHandler.SetProtection(). Por último, confirme el cambio en el archivo para escribir un archivo nuevo.

Cuándo aplicar protección a los archivos

Cuando se establece una etiqueta mediante FileHandler.SetLabel(), el SDK de MIP tiene todo lo que necesita para tomar medidas y aplicar cualquier protección. Cuando una etiqueta usa permisos definidos por el usuario (UDP), la aplicación no tiene forma de saber con antelación que la etiqueta es una etiqueta UDP. El SDK de MIP muestra esta información lanzando una excepción del tipo Microsoft.InformationProtection.Exceptions.AdhocProtectionRequiredException. El FileHandler código debe detectar esta excepción y, a continuación, desencadenar la interfaz de usuario o servicio para definir los permisos personalizados. Una vez completado ese proceso, puede establecer la protección. En el ejemplo siguiente se muestra el patrón de un extremo a otro, pero se supone que ya ha implementado una función para compilar el List<UserRights> objeto.

try
{
    // Attempt to set the label. If it's a UDP label, this will throw. 
    handler.SetLabel(engine.GetLabelById(options.LabelId), labelingOptions, new ProtectionSettings());
}

catch (Microsoft.InformationProtection.Exceptions.AdhocProtectionRequiredException)
{
    // Assumes you've create a function that returns the List<UserRights> as previously detailed. 
    List<UserRights> userRightsList = GetUserRights();

    // Create a ProtectionDescriptor using the set of UserRights.
    ProtectionDescriptor protectionDescriptor = new ProtectionDescriptor(userRightsList);
    
    // Apply protection to the file using the new ProtectionDescriptor. 
    handler.SetProtection(protectionDescriptor, new ProtectionSettings());

    // Set the label. This will now succeed as protection has been defined. 
    handler.SetLabel(engine.GetLabelById(options.LabelId), labelingOptions, new ProtectionSettings());

    // Commit the change. 
    var result = Task.Run(async () => await handler.CommitAsync("myFileOutput.xlsx")).Result;
}

Protección personalizada

También puede usar este proceso para establecer solo la protección estableciendo la protección y omitiendo el SetLabel() paso. Si la aplicación no necesita aplicar una etiqueta, el controlador de excepciones no es necesario. Para establecer la protección, siga el ProtectionDescriptor patrón - -CommitAsync()>SetProtection()> .

Pasos siguientes