Sobes.tech
Middle

Kus te hoiustate tokenid?

sobes.tech AI

Vastus AI-lt

Tokenite, eriti konfidentsiaalsete (API juurdepääs, kasutaja sessioonid) salvestamiseks Androidi rakenduses, kaaluksin järgmisi kohti:

  1. SharedPreferences (krüptitud või kasutades EncryptedSharedPreferences): Sobib väikeste tokenite jaoks. EncryptedSharedPreferences (Security Library osa) pakub riistvaralist krüptimist toetatud seadmetel, suurendades turvalisust võrreldes tavaliste SharedPreferences'iga.

    // EncryptedSharedPreferences loomine
    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
    )
    
    // Tokeni salvestamine
    with(sharedPreferences.edit()) {
        putString("auth_token", "teie tundlik token")
        apply()
    }
    
    // Tokeni lugemine
    val authToken = sharedPreferences.getString("auth_token", null)
    
  2. Android Keystore süsteem: Kõige turvalisem viis krüptograafiliste võtmete ja tundlike andmete salvestamiseks. Võtmed salvestatakse seadme kaitstud alale ning neid ei saa rakendusest välja võtta. Keystore süsteemi saab kasutada tokenite krüpteerimiseks/krüpteerimiseks, mis salvestatakse SharedPreferences või andmebaasis.

    // Näide võtme saamisest Keystore'ist (API tase 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
    // Kasuta secretKey tokeni krüpteerimiseks/krüpteerimiseks
    
  3. SQLite andmebaas (krüptitud tabelid või veerud): Kui tokenite arv on suur või need on seotud teiste andmetega, saab kasutada lokaalset andmebaasi. Turvalisuse tagamiseks tuleks tokeni andmed salvestada krüpteeritud veergudes või kasutada teeki, mis võimaldab kogu andmebaasi krüpteerimist (näiteks SQLCipher Android jaoks).

    -- Näide, kuidas luua tabel krüpteeritud veeruga (sõltub teegist)
    CREATE TABLE users (
        id INTEGER PRIMARY KEY,
        username TEXT,
        auth_token BLOB -- Krüpteeritud tokeni salvestus
    );
    
  4. Rakenduse mälu (RAM): Ainult ajutiseks tokeni hoidmiseks lühikese aja jooksul selle kasutamise ajal. Pärast sessiooni lõppu või rakenduse sulgemist eemaldatakse token ning see salvestatakse turvalisemalt. Ei sobi püsivaks salvestamiseks.

Valik sõltub:

  • Tokeni konfidentsiaalsusest: Kui tundlik on token?
  • Tokeni suurusest: Väiksemad tokenid on mugavam salvestada SharedPreferences või Keystore.
  • Tokeni eluea ajast: Kas token on vajalik pärast rakenduse sulgemist?
  • Androidi versioonidest: Keystore ja EncryptedSharedPreferences tugi varieerub.

Soovitus: Kombineerida Keystore krüpteerimisvõtme salvestamiseks koos krüpteeritud SharedPreferences või krüpteeritud andmebaasiga tokeni salvestamiseks. See tagab kõrge turvalisuse taseme suhteliselt lihtsa kasutamisega.