Onde vai armazenar os tokens?
sobes.tech IA
Resposta da IA
Para armazenar tokens, especialmente os confidenciais (acesso à API, sessões de utilizador), numa aplicação Android, considerarei os seguintes locais:
-
SharedPreferences (criptografados ou usando
EncryptedSharedPreferences) : Adequado para tokens pequenos.EncryptedSharedPreferences(parte da Biblioteca de Segurança) fornece criptografia de hardware em dispositivos compatíveis, aumentando a segurança em comparação com SharedPreferences normais.// Criar EncryptedSharedPreferences val context: Context = applicationContext val masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC) val sharedPreferences = EncryptedSharedPreferences.create( "secure_preferences", masterKeyAlias, context, EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM ) // Guardar token with(sharedPreferences.edit()) { putString("auth_token", "o_seu_token_sensível") apply() } // Ler token val authToken = sharedPreferences.getString("auth_token", null) -
Sistema Android Keystore: A forma mais segura de armazenar chaves criptográficas e dados sensíveis. As chaves são armazenadas numa área protegida do dispositivo e não podem ser extraídas da aplicação. Pode usar o Keystore para cifrar/decifrar tokens armazenados em SharedPreferences ou numa base de dados.
// Exemplo de obtenção de uma chave do Keystore (para API nível 23+) val keyStore = KeyStore.getInstance("AndroidKeyStore") keyStore.load(null) val secretKeyEntry = keyStore.getEntry("my_encryption_key_alias", null) as KeyStore.SecretKeyEntry val secretKey = secretKeyEntry.secretKey // Uso de secretKey para cifrar/decifrar o token -
Base de dados SQLite (tabelas ou colunas encriptadas): Se tiver muitos tokens ou estiverem relacionados com outros dados, pode usar uma base de dados local. Para maior segurança, armazene os dados dos tokens em colunas encriptadas ou use uma biblioteca que forneça cifragem para toda a base de dados (por exemplo, SQLCipher para Android).
-- Exemplo de criação de tabela com coluna encriptada (depende da biblioteca) CREATE TABLE users ( id INTEGER PRIMARY KEY, username TEXT, auth_token BLOB -- Armazenamento do token encriptado ); -
Memória da aplicação (RAM): Apenas para armazenamento temporário do token durante um curto período de uso na sessão atual. Após terminar a sessão ou fechar a aplicação, o token é extraído e armazenado de forma mais segura. Não adequado para armazenamento persistente.
A escolha depende de:
- Confidencialidade do token: Quão sensível é o token?
- Tamanho do token: Tokens pequenos são mais fáceis de armazenar em SharedPreferences ou Keystore.
- Tempo de vida do token: Precisa do token após fechar a aplicação?
- Versões do Android: A compatibilidade com Keystore e
EncryptedSharedPreferencesvaria.
Recomendação: Combinar Keystore para armazenar a chave de cifragem com SharedPreferences encriptados ou uma base de dados encriptada para armazenar o próprio token. Isto garante um alto nível de segurança com uso relativamente simples.