Condividi tramite


Come proteggere file con la cancellazione selettiva (HTML)

[ Questo articolo è rivolto agli sviluppatori per Windows 8.x e Windows Phone 8.x che realizzano app di Windows Runtime. Gli sviluppatori che usano Windows 10 possono vedere Documentazione aggiornata ]

Puoi usare la cancellazione selettiva per identificare i file protetti nella tua app che possono essere revocati quando un utente dell'app non ha più l'autorizzazione per i dati dell'app. È uno scenario comune nelle aziende che consentono ai dipendenti di usare per lavoro i dispositivi personali. Quando il dipendente lascia la società, i file aziendali sul dispositivo personale possono essere rimossi.

Un dipendente, ad esempio, porta il proprio Tablet PC in ufficio e lo usa per le email di lavoro. L'app di email può proteggere tutti i file usati per archiviare le email aziendali localmente nel computer con la cancellazione selettiva. Questa associa i file alla società con un identificatore azienda, come "esempio.com". Se l'utente non è più un dipendente della società, la prossima volta in cui aprirà l'app di email aziendale, l'app potrà determinare che l'utente non è più un dipendente e comunicare alla cancellazione selettiva di revocare l'accesso a tutti i file protetti per l'identificatore azienda. Quando l'app tenta di accedere a un file e determina che è stato revocato, può quindi eliminare il file.

Prerequisiti

  • Il codice di esempio di questo argomento presuppone che siano impostate le variabili globali seguenti.

    var appRootFolder = Windows.Storage.ApplicationData.current;
    var enterpriseIdentity = "example.com";
    var accessDeniedHResult = -2147024891;  // Access Denied (0x80070005)
    

Proteggere un file o una cartella con la cancellazione selettiva

Puoi usare il metodo protectAsync per proteggere un file o una cartella con la cancellazione selettiva. Questo identifica il file come protetto per l'identificatore azienda, ad esempio "example.com", come mostrato nell'esempio di codice precedente. Se proteggi una cartella con il metodo protectAsync, tutti i file contenuti nella cartella ereditano la stessa protezione.

// 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;
            });
}

Revocare l'accesso alle cartelle e ai file protetti

Quando l'app determina che un utente non è più valido, puoi revocare rapidamente l'accesso a tutte le cartelle e a tutti i file protetti per un'identità aziendale con il metodo revoke, come mostrato nell'esempio seguente. Il file non viene eliminato dal metodo revoke. Il metodo revoke imposta il file su uno stato in cui non è accessibile. Puoi aggiungere all'app il codice per eliminare un file non accessibile e che è stato revocato, come mostrato nell'esempio successivo.

function initializeApp(userName) {
    if (getUserStatus(userName) == "Not Found") {
        Windows.Security.EnterpriseData.FileRevocationManager.revoke(enterpriseIdentity);
    }
}

Ottenere lo stato di un file

Puoi usare il metodo getStatusAsync per determinare lo stato di protezione della cancellazione selettiva per un file o una cartella. In questo modo sarà evidente se un file è protetto o meno, se un file è protetto da un altro utente del computer e così via. Il metodo getStatusAsync viene comunemente usato per determinare quando un file protetto deve essere eliminato. Quando, ad esempio, un file protetto viene revocato, il tentativo di accedere ai contenuti del file genererà l'eccezione "Accesso negato". Quando incontri questa eccezione, puoi usare il metodo getStatusAsync per determinare se il file è stato revocato dalla cancellazione selettiva e in tal caso eliminarlo, come mostrato nell'esempio seguente.

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();
                }
        });

}

Copiare un file protetto

Quando copi un file con il metodo copyAsync o copyAndReplaceAsync, la protezione della cancellazione selettiva non viene automaticamente applicata dal file copiato alla nuovo copia del file. Ciò si applica ai file in cui si "salva con nome" un nuovo file. In questo caso, puoi copiare la protezione della cancellazione selettiva dal file originale con il metodo copyProtectionAsync, come mostrato nell'esempio seguente.

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.
        });
}

Esempio completo

Argomenti correlati

Esempio FileRevocationManager

Windows.Security.EnterpriseData namespace

Implementazione della sicurezza nelle app