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 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 lida automaticamente com esse caso removendo a chave para que ela possa ser redefinida, mas você pode dar um passo adicional desativando 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.
Defina o atributo
android:fullBackupContent
em seu AndroidManifest.xml:<application ... android:fullBackupContent="@xml/auto_backup_rules"> </application>
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 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 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
.
API de nível 23 e mais recente
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.
API de nível 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
Vídeo relacionados
Encontre mais vídeos sobre o Xamarin no Channel 9 e no YouTube.