Sobes.tech
Middle

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:

  1. 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)
    
  2. 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
    
  3. 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
    );
    
  4. 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 EncryptedSharedPreferences varira.

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.