Share via


Armazenamento seguro

Browse sample. Navegue pelo exemplo

Este artigo descreve como você pode usar a interface .NET Multi-platform App UI (.NET MAUI). ISecureStorage Essa interface ajuda a armazenar com segurança pares chave/valor simples.

A implementação padrão da interface está disponível por meio da ISecureStorageSecureStorage.Default propriedade. A interface e SecureStorage a ISecureStorage classe estão contidas no Microsoft.Maui.Storage namespace.

Introdução

Para acessar a funcionalidade, é necessária a seguinte configuração específica da SecureStorage plataforma:

O Backup Automático para Aplicativos é um recurso do Android 6.0 (nível da API 23) e posterior que faz o backup dos dados do aplicativo do usuário (preferências compartilhadas, arquivos no armazenamento interno do aplicativo e outros arquivos específicos). Os dados são restaurados quando um aplicativo é reinstalado ou instalado em um novo dispositivo. Isso pode afetar SecureStorageo , que utiliza preferências de compartilhamento cujo backup é feito e não pode ser descriptografado quando a restauração ocorre. O .NET MAUI lida automaticamente com esse caso removendo a chave para que ela possa ser redefinida. Como alternativa, você pode desativar o Backup Automático.

Habilitar ou desabilitar o backup

Você pode optar por desativar o Backup Automático para todo o aplicativo definindo android:allowBackup como false no arquivo AndroidManifest.xml . Essa abordagem só é recomendada se você planeja restaurar dados de uma outra maneira.

<manifest ... >
    ...
    <application android:allowBackup="false" ... >
        ...
    </application>
</manifest>

Backup seletivo

O backup automático pode ser configurado para desabilitar o backup de um conteúdo específico. Você pode criar uma regra personalizada definida para excluir itens do SecureStore de passarem por backup.

  1. Defina o atributo android:fullBackupContent em seu AndroidManifest.xml:

    <application ...
        android:fullBackupContent="@xml/auto_backup_rules">
    </application>
    
  2. Crie um novo arquivo XML chamado auto_backup_rules.xml no diretório Platforms/Android/Resources/xml com a ação de compilação de AndroidResource. Defina o seguinte conteúdo que inclui todas as preferências compartilhadas, exceto para SecureStorage:

    <?xml version="1.0" encoding="utf-8"?>
    <full-backup-content>
        <include domain="sharedpref" path="."/>
        <exclude domain="sharedpref" path="${applicationId}.microsoft.maui.essentials.preferences.xml"/>
    </full-backup-content>
    

Usar armazenamento seguro

Os exemplos de código a seguir demonstram como usar o armazenamento seguro.

Dica

É possível que uma exceção seja lançada ao chamar GetAsync ou SetAsync. Isso pode ser causado por um dispositivo que não oferece suporte a armazenamento seguro, alteração de chaves de criptografia ou corrupção de dados. É melhor lidar com isso removendo e adicionando a configuração de volta, se possível.

Escrever um valor

Para salvar um valor para uma determinada chave no armazenamento seguro:

await SecureStorage.Default.SetAsync("oauth_token", "secret-oauth-token-value");

Ler um valor

Para recuperar um valor do armazenamento seguro:

string oauthToken = await SecureStorage.Default.GetAsync("oauth_token");

if (oauthToken == null)
{
    // No value is associated with the key "oauth_token"
}

Dica

Se não houver um valor associado à chave, GetAsync retornará null.

Remover um valor

Para remover um valor específico, remova a chave:

bool success = SecureStorage.Default.Remove("oauth_token");

Para remover todos os valores, use o RemoveAll método:

SecureStorage.Default.RemoveAll();

Diferenças de plataforma

Esta seção descreve as diferenças específicas da plataforma com a API de armazenamento seguro.

SecureStorageusa a API de Preferências e segue a mesma persistência de dados descrita na documentação de Preferências, com um nome de arquivo de [YOUR-APP-PACKAGE-ID].microsoft.maui.essentials.preferences. No entanto, os dados são criptografados com a classe Android, da biblioteca de segurança do Android EncryptedSharedPreferences , que encapsula a classe e criptografa SharedPreferences automaticamente chaves e valores usando uma abordagem de dois esquemas:

  • As chaves são criptografadas deterministicamente, para que a chave possa ser criptografada e pesquisada corretamente.
  • Os valores são criptografados não deterministicamente usando AES-256 GCM.

Para obter mais informações sobre a biblioteca de segurança do Android, consulte Trabalhar com dados com mais segurança em developer.android.com.

Limitações

O desempenho pode ser afetado se você armazenar grandes quantidades de texto, pois a API foi projetada para armazenar pequenas quantidades de texto.