Armazenamento seguro
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.
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 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.