Linguaggio: HTML | XAML

Come proteggere file con la cancellazione selettiva (XAML)

Applies to Windows and Windows Phone

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.
    
    ApplicationData appRootFolder = ApplicationData.Current;
    string enterpriseIdentity = "example.com";
    int 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.
private async Task<StorageFolder> AddFolder(string folderName)
{
    StorageFolder newFolder = await appRootFolder.LocalFolder.CreateFolderAsync(folderName);

    var status = await ProtectItem(newFolder, enterpriseIdentity);

    return newFolder;
}

// Add a file and protect it using Selective Wipe.
private async Task<StorageFile> AddFile(string fileName, StorageFolder folder)
{
    StorageFile newFile = await folder.CreateFileAsync(fileName);

    var status = 
        await Windows.Security.EnterpriseData.FileRevocationManager.
            GetStatusAsync(newFile);

    if (status != Windows.Security.EnterpriseData.FileProtectionStatus.Protected)
    {
        status = await ProtectItem(newFile, enterpriseIdentity);
    }

    return newFile;
}

private async Task<Windows.Security.EnterpriseData.FileProtectionStatus> 
    ProtectItem(IStorageItem item, string enterpriseIdentity)
{
    var status = 
        await Windows.Security.EnterpriseData.FileRevocationManager.
            ProtectAsync(item, enterpriseIdentity);

    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.


private void InitializeApp(string userName)
{
    if (GetUserStatus(userName) == AppUserStatus.NotFound)
    {
        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.


private async Task<IRandomAccessStream> GetFileContents(string filePath)
{
    IRandomAccessStream stream = null;
    StorageFile file = null;

    try
    {
        file = await StorageFile.GetFileFromPathAsync(filePath);
        stream = await file.OpenReadAsync();
    }
    catch (UnauthorizedAccessException e)
    {
        if (e.HResult == AccessDeniedHResult)
        {
            // Delete file if it has been revoked.
            SelectiveWipeCleanup(file);
        }

        return null;
    }

    return stream;
}

// Delete items revoked by Selective Wipe.
private async void SelectiveWipeCleanup(StorageFile file)
{
    var status = await Windows.Security.EnterpriseData.FileRevocationManager.GetStatusAsync(file);
    if (status == Windows.Security.EnterpriseData.FileProtectionStatus.Revoked)
    {
        await 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.


public async Task<bool> CopyFile(StorageFile file, StorageFolder newFolder) 
{
    bool result = false;

    try
    {
        var newFile = await file.CopyAsync(newFolder);
        result = await 
            Windows.Security.EnterpriseData.FileRevocationManager.
            CopyProtectionAsync(file, newFile);
        }
    catch (Exception e) 
    {
        // Handle exception. For example, copy already exists.
    }

    return result;
}


Esempio completo

Argomenti correlati

Esempio FileRevocationManager
Windows.Security.EnterpriseData namespace
Implementazione della sicurezza nelle app

 

 

Mostra:
© 2015 Microsoft