Share via


Xamarin.Essentials: armazenamento seguro

A classe SecureStorage ajuda a armazenar com segurança os pares de chave/valor simples.

Introdução

Para começar a usar essa API, leia o guia de introdução para Xamarin.Essentials para garantir que a biblioteca esteja instalada e configurada corretamente em seus projetos.

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

Dica

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 a SecureStorage, que utiliza as preferências de compartilhamento do backup e que não podem ser descriptografadas quando a restauração ocorrer. Xamarin.Essentials manipula automaticamente esse caso removendo a chave para que ela possa ser redefinida, mas você pode executar uma etapa adicional desabilitando 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 Resources/xml com a ação de compilação de AndroidResource. Em seguida, 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}.xamarinessentials.xml"/>
    </full-backup-content>
    

Uso do armazenamento seguro

Adicione uma referência a Xamarin.Essentials em sua classe:

using Xamarin.Essentials;

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

try
{
  await SecureStorage.SetAsync("oauth_token", "secret-oauth-token-value");
}
catch (Exception ex)
{
  // Possible that device doesn't support secure storage on device.
}

Para recuperar um valor do armazenamento seguro:

try
{
  var oauthToken = await SecureStorage.GetAsync("oauth_token");
}
catch (Exception ex)
{
  // Possible that device doesn't support secure storage on device.
}

Observação

Se não houver valores associados à chave solicitada, GetAsync retornará null.

Para remover uma chave específica, chame:

SecureStorage.Remove("oauth_token");

Para remover todas as chaves, chame:

SecureStorage.RemoveAll();

Dica

É possível que uma exceção seja gerada ao chamar GetAsync ou SetAsync. Isso pode ser causado por um dispositivo que não dá 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.

Particularidades de implementação da plataforma

O Repositório de chaves do Android é usado para armazenar a chave de criptografia usada para criptografar o valor antes que ele seja salvo em Preferências Compartilhadas com um nome de arquivo [ID-DO-SEU-PACOTE-DE-APLICATIVO].xamarinessentials. A chave (não uma chave de criptografia, a chave para o valor) usada no arquivo de preferências compartilhadas é um Hash MD5 da chave passada para as APIs do SecureStorage.

Nível da API 23 e superior

Em níveis da API mais recentes, uma chave AES é obtida do Repositório de chaves do Android e usada com uma cifra AES/GCM/NoPadding para criptografar o valor antes que ele seja armazenado no arquivo de preferências compartilhadas.

Nível da API 22 e inferior

Em níveis de API mais antigos, o Repositório de chaves do Android só é compatível com o armazenamento de chaves RSA, que é usado com uma cifra RSA/ECB/PKCS1Padding para criptografar uma chave AES (aleatoriamente gerada no runtime) e armazenado no arquivo de preferências compartilhadas sob a chave SecureStorageKey, caso ainda não tenha sido gerado.

SecureStorage usa a API Preferências e segue a mesma persistência de dados descrita na documentação de Preferências. Se um dispositivo fizer o upgrade do nível da API 22 ou inferior para o nível da API 23 e superior, esse tipo de criptografia continuará a ser usado, a menos que o aplicativo seja desinstalado ou RemoveAll seja chamado.

Limitações

Essa API destina-se a armazenar pequenas quantidades de texto. O desempenho pode ser lento se você tentar usá-lo para armazenar grandes quantidades de texto.

API

Encontre mais vídeos sobre o Xamarin no Channel 9 e no YouTube.