Armazenamento seguro
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 ISecureStorage
SecureStorage.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 SecureStorage
o , 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.
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>
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.
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 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.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários