Gde ćete čuvati tokene?
sobes.tech АИ
Одговор од АИ
Za skladištenje tokena, posebno poverljivih (pristup API-ju, korisničke sesije), u Android aplikaciji razmotriću sledeća mesta:
-
SharedPreferences (šifrovani ili korišćenjem
EncryptedSharedPreferences): Pogodno za male tokene.EncryptedSharedPreferences(deo Security Library) pruža hardversko šifrovanje na podržanim uređajima, povećavajući sigurnost u poređenju sa običnim SharedPreferences.// Kreiranje 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 ) // Čuvanje tokena with(sharedPreferences.edit()) { putString("auth_token", "your_sensitive_token") apply() } // Čitanje tokena val authToken = sharedPreferences.getString("auth_token", null) -
Android Keystore Sistem: Najsigurniji način za skladištenje kriptografskih ključeva i osetljivih podataka. Ključevi se čuvaju u zaštićenoj oblasti uređaja i ne mogu biti izvučeni iz aplikacije. Keystore sistem može se koristiti za šifrovanje/dešifrovanje tokena koji se čuvaju u SharedPreferences ili bazi podataka.
// Primer dobijanja ključa iz Keystore-a (za API nivo 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 // Korišćenje secretKey za šifrovanje/dešifrovanje tokena -
SQLite baza podataka (šifrovane tabele ili kolone): Ako je tokena mnogo ili su povezani sa drugim podacima, može se koristiti lokalna baza podataka. Za povećanu sigurnost, podaci tokena treba da budu sačuvani u šifrovanim kolonama ili koristiti biblioteku koja pruža šifrovanje cele baze podataka (npr. SQLCipher za Android).
-- Primer kreiranja tabele sa šifrovanom kolonom (zavisno od biblioteke) CREATE TABLE users ( id INTEGER PRIMARY KEY, username TEXT, auth_token BLOB -- Čuvanje šifrovanog tokena ); -
Memorija aplikacije (RAM): Samo za privremeno čuvanje tokena tokom kratkog vremena njegove upotrebe u trenutnoj sesiji. Nakon završetka sesije ili zatvaranja aplikacije, token se izvlači i čuva sigurnije. Nije pogodno za trajno čuvanje.
Izbor zavisi od:
- Poverljivosti tokena: Koliko je token osetljiv?
- Veličine tokena: Mali tokeni su zgodniji za čuvanje u SharedPreferences ili Keystore.
- Vremena trajanja tokena: Da li je potreban token nakon zatvaranja aplikacije?
- Verzije Androida: Podrška za Keystore i
EncryptedSharedPreferencesvarira.
Preporuka: Kombinujte Keystore za čuvanje ključa za šifrovanje sa šifrovanim SharedPreferences ili šifrovanom bazom podataka za čuvanje samog tokena. Ovo obezbeđuje visok nivo sigurnosti uz relativno jednostavnu upotrebu.