Kde budete ukládat tokeny?
sobes.tech AI
Odpověď od AI
Pro ukládání tokenů, zejména důvěrných (přístup k API, uživatelské relace), v aplikaci Android zvážím následující místa:
-
SharedPreferences (zašifrované nebo s použitím
EncryptedSharedPreferences): Vhodné pro malé tokeny.EncryptedSharedPreferences(součást Bezpečnostní knihovny) poskytuje hardwarové šifrování na podporovaných zařízeních, čímž zvyšuje bezpečnost oproti běžným SharedPreferences.// Vytvoření 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 ) // Uložení tokenu with(sharedPreferences.edit()) { putString("auth_token", "your_sensitive_token") apply() } // Čtení tokenu val authToken = sharedPreferences.getString("auth_token", null) -
Systém Android Keystore: Nejbezpečnější způsob ukládání kryptografických klíčů a citlivých dat. Klíče jsou uloženy v chráněné oblasti zařízení a nemohou být získány z aplikace. Keystore lze použít k šifrování/dešifrování tokenů uložených v SharedPreferences nebo databázi.
// Příklad získání klíče z Keystore (pro API úroveň 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 // Použití secretKey pro šifrování/dešifrování tokenu -
SQLite databáze (zašifrované tabulky nebo sloupce): Pokud je tokenů hodně nebo jsou spojeny s jinými daty, lze použít místní databázi. Pro zvýšení bezpečnosti by měla být data tokenů uložena v zašifrovaných sloupcích nebo použít knihovnu poskytující šifrování celé databáze (například SQLCipher for Android).
-- Příklad vytvoření tabulky se zašifrovaným sloupcem (závisí na knihovně) CREATE TABLE users ( id INTEGER PRIMARY KEY, username TEXT, auth_token BLOB -- Uložení zašifrovaného tokenu ); -
Paměť aplikace (RAM): Pouze pro dočasné uložení tokenu během krátké doby jeho použití v aktuální relaci. Po ukončení relace nebo zavření aplikace je token extrahován a uložen bezpečněji. Není vhodné pro perzistentní ukládání.
Výběr závisí na:
- Důvěrnosti tokenu: Jak citlivý je token?
- Velikosti tokenu: Malé tokeny jsou pohodlnější k uložení v SharedPreferences nebo Keystore.
- Délce životnosti tokenu: Je potřeba token po zavření aplikace?
- Verzi Androidu: Podpora Keystore a
EncryptedSharedPreferencesse liší.
Doporučení: Kombinujte Keystore pro ukládání šifrovacího klíče s zašifrovanými SharedPreferences nebo zašifrovanou databází pro ukládání samotného tokenu. To zajistí vysokou úroveň bezpečnosti při relativně jednoduchém použití.