Cómo proteger archivos con la eliminación selectiva (HTML)
[ Este artículo está destinado a desarrolladores de Windows 8.x y Windows Phone 8.x que escriben aplicaciones de Windows en tiempo de ejecución. Si estás desarrollando para Windows 10, consulta la documentación más reciente
Puedes usar la eliminación selectiva para identificar los archivos protegidos en tu aplicación que pueden revocarse cuando un usuario de la aplicación ya no está autorizado para acceder a los datos de tu aplicación. Este escenario es habitual en empresas que permiten a sus empleados llevarse sus propios dispositivos al trabajo. Cuando el empleado abandona la empresa, se pueden quitar los archivos de la empresa almacenados en su dispositivo personal.
Por ejemplo, un empleado se lleva su tableta personal a la oficina y la usa para el correo electrónico de la empresa. La aplicación de correo electrónico puede usar la eliminación selectiva para proteger todos los archivos que se usan para almacenar localmente en el equipo los correos electrónicos de la empresa. Para llevarlo a cabo, se asocian esos archivos a la empresa mediante un identificador de empresa, como "sample.com". Si el usuario ya no trabaja para la empresa, la próxima vez que abra la aplicación de correo electrónico de la empresa, la aplicación puede determinar que el usuario ya no es un empleado e indicar a la eliminación selectiva que revoque el acceso a todos los archivos protegidos para su identificador de empresa. Cuando la aplicación intenta acceder a un archivo y determina que se ha revocado, la aplicación puede eliminar el archivo.
Requisitos previos
En el código de ejemplo de este tema se supone que se han establecido las siguientes variables globales.
var appRootFolder = Windows.Storage.ApplicationData.current; var enterpriseIdentity = "example.com"; var accessDeniedHResult = -2147024891; // Access Denied (0x80070005)
Proteger un archivo o carpeta mediante la eliminación selectiva
Puedes usar el método protectAsync para proteger un archivo o carpeta mediante la eliminación selectiva. El archivo se identifica como protegido para tu identificador de empresa (por ejemplo, "example.com"), como se muestra en el código de ejemplo anterior. Si proteges una carpeta con el método protectAsync, todos los archivos de esa carpeta heredan la misma protección.
// Add a folder and protect it using Selective Wipe.
function addFolder(folderName) {
appRootFolder.localFolder.createFolderAsync(folderName).then(
function (newFolder) {
protectItem(newFolder);
});
}
// Add a file and protect it using Selective Wipe.
function addFile(fileName, folder) {
folder.createFileAsync(fileName).then(
function (newFile) {
Windows.Security.EnterpriseData.
FileRevocationManager.getStatusAsync(newFile).then(
function (status) {
if (status != Windows.Security.EnterpriseData.
FileProtectionStatus.Protected) {
protectItem(newFile, enterpriseIdentity);
}
});
},
function (err) {
// Handle error. For example, file already exists.
});
}
function protectItem(item, enterpriseIdentity) {
Windows.Security.EnterpriseData.FileRevocationManager.
protectAsync(item, enterpriseIdentity).then(
function (status) {
return status;
});
}
Revocar el acceso a carpetas y archivos protegidos
Cuando tu aplicación determina que un usuario ya no es válido, puedes revocar rápidamente el acceso a todos los archivos y carpetas protegidos para un identificador de empresa mediante el método revoke, como se muestra en el siguiente ejemplo. El archivo no se elimina mediante el método revoke. El método revoke coloca el archivo en un estado inaccesible. Puedes agregar código a tu aplicación para eliminar un archivo que sea inaccesible y que se haya revocado, como se muestra en el siguiente ejemplo.
function initializeApp(userName) {
if (getUserStatus(userName) == "Not Found") {
Windows.Security.EnterpriseData.FileRevocationManager.revoke(enterpriseIdentity);
}
}
Obtener el estado de un archivo
Puedes usar el método getStatusAsync para determinar el estado de protección de la eliminación selectiva de un archivo o carpeta. Te indicará si un archivo está protegido o no, si está protegido por otro usuario en el equipo, etc. Un uso habitual del método getStatusAsync es determinar cuándo debe eliminarse un archivo protegido. Por ejemplo, cuando se revoca un archivo protegido, al intentar acceder al contenido del archivo, se generará una excepción "Acceso denegado". Si encuentras esta excepción, puedes usar el método getStatusAsync para determinar si el archivo se ha revocado mediante la eliminación selectiva y, a continuación, eliminar el archivo (en caso de tenerlo), como se muestra en el siguiente ejemplo.
function getFileContents(filePath) {
var stream;
var file;
Windows.Storage.StorageFile.getFileFromPathAsync(filePath).then(
function (f) {
file = f;
file.openReadAsync().then(
function (s) {
stream = s;
return stream;
},
function (err) {
if (err.number == accessDeniedHResult) {
// Delete file if it has been revoked.
selectiveWipeCleanup(file);
}
});
});
return null;
}
// Delete items revoked by Selective Wipe.
function selectiveWipeCleanup(file) {
Windows.Security.EnterpriseData.FileRevocationManager.
getStatusAsync(file).then(
function (status) {
if (status ==
Windows.Security.EnterpriseData.FileProtectionStatus.revoked) {
file.deleteAsync();
}
});
}
Copiar un archivo protegido
Cuando copias un archivo mediante los métodos copyAsync o copyAndReplaceAsync, la protección de eliminación selectiva del archivo copiado no se aplica automáticamente a la nueva copia del archivo. Esto afecta a los archivos que se guardan como un archivo nuevo mediante "Guardar como". En ese caso, puedes copiar la protección de eliminación selectiva del archivo original mediante el método copyProtectionAsync, como se muestra en el siguiente ejemplo.
function copyFile(file, newFolder) {
file.copyAsync(newFolder).then(
function (newFile) {
Windows.Security.EnterpriseData.FileRevocationManager.
copyProtectionAsync(file, newFile);
},
function (err) {
// Handle error. For example, copy already exists.
});
}
Ejemplo completo
Temas relacionados
Muestra de FileRevocationManager