Sobes.tech
Middle

Kur glabāsiet tokenus?

sobes.tech AI

Atbilde no AI

Lai glabātu tokenus, īpaši konfidenciālus (API piekļuves, lietotāja sesijas), Android lietotnē, es apsvērtu šādas vietas:

  1. SharedPreferences (šifrēti vai ar EncryptedSharedPreferences): Piemērots nelieliem tokeniem. EncryptedSharedPreferences (daļa no Security Library) nodrošina aparatūras šifrēšanu atbalstītās ierīcēs, palielinot drošību salīdzinājumā ar parastajiem SharedPreferences.

    // EncryptedSharedPreferences izveide
    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
    )
    
    // Tokena saglabāšana
    with(sharedPreferences.edit()) {
        putString("auth_token", "jūsu konfidenciālais tokens")
        apply()
    }
    
    // Tokena lasīšana
    val authToken = sharedPreferences.getString("auth_token", null)
    
  2. Android Keystore sistēma: Visdrošākais veids, kā glabāt šifrēšanas atslēgas un jutīgas datus. Atslēgas tiek glabātas ierīces aizsargātajā zonā un nav pieejamas lietotnes līmenī. Keystore sistēmu var izmantot tokenu šifrēšanai/atšifrēšanai, kas glabājas SharedPreferences vai datu bāzē.

    // Piemērs, kā iegūt atslēgu no Keystore (API līmenis 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
    // Izmanto secretKey šifrēšanai/atšifrēšanai
    
  3. SQLite datu bāze (šifrētas tabulas vai kolonnas): Ja tokenu ir daudz vai tie ir saistīti ar citiem datiem, var izmantot lokālo datu bāzi. Drošības nolūkos tokenu dati jāglabā šifrētās kolonnās vai jāizmanto bibliotēka, kas nodrošina visas datu bāzes šifrēšanu (piemēram, SQLCipher Android).

    -- Piemērs, kā izveidot tabulu ar šifrētu kolonnu (atkarīgs no bibliotēkas)
    CREATE TABLE users (
        id INTEGER PRIMARY KEY,
        username TEXT,
        auth_token BLOB -- Šifrēts tokena glabāšanas lauks
    );
    
  4. Lietotnes atmiņa (RAM): Tikai pagaidu tokena glabāšanai īsu laiku tās izmantošanas laikā. Pēc sesijas beigām vai lietotnes aizvēršanas tokens tiek izņemts un glabāts drošāk. Nav piemērots ilgtermiņa glabāšanai.

Izvēle ir atkarīga no:

  • Tokena konfidencialitātes: Cik jutīgs ir tokens?
  • Tokena izmēra: Mazāki tokeni ir ērtāk glabājami SharedPreferences vai Keystore.
  • Tokena derīguma laika: Vai nepieciešams tokens pēc lietotnes aizvēršanas?
  • Android versijas: Keystore un EncryptedSharedPreferences atbalsts atšķiras.

Ieteikums: Apvienot Keystore, lai glabātu šifrēšanas atslēgu, ar šifrētiem SharedPreferences vai šifrētu datu bāzi, lai glabātu pašu tokenu. Tas nodrošina augstu drošības līmeni ar relatīvi vienkāršu lietošanu.