Armazenamento seguro

Procurar amostra. Procurar no exemplo

Este artigo descreve como você pode usar a interface do usuário do aplicativo .NET multiplataforma (.NET MAUI) ISecureStorage. Essa interface ajuda a armazenar com segurança pares simples de chave/valor.

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

Introdução

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

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 SecureStorage, que utiliza as preferências de compartilhamento do backup e que não podem ser descriptografadas quando a restauração ocorrer. O .NET MAUI resolve automaticamente 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 desabilitar o Backup Automático para todo o aplicativo definindo a configuração android:allowBackup como falsa 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>
    

Uso do 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 suporta armazenamento seguro, alteração de chaves de criptografia ou corrupção de dados. É melhor resolver isso removendo e adicionando a configuração de volta, se possível.

Gravar 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 método RemoveAll:

SecureStorage.Default.RemoveAll();

Diferenças de plataforma

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

SecureStorage usa 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 EncryptedSharedPreferences do Android, da biblioteca de Segurança do Android, que encapsula a SharedPreferences classe e criptografa automaticamente chaves e valores usando uma abordagem de dois esquemas:

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

Para 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 poderá ser afetado se você armazenar grandes quantidades de texto, pois a API foi projetada para armazenar pequenas quantidades de texto.