Sobes.tech
Middle

Къде ще съхранявате токените?

sobes.tech AI

Отговор от AI

За съхранение на токени, особено конфиденциални (достъп до API, потребителски сесии), в Android приложение ще разгледам следните места:

  1. SharedPreferences (шифровани или с използване на EncryptedSharedPreferences): Подходящо за малки токени. EncryptedSharedPreferences (част от Security Library) предоставя хардуерно шифроване на поддържани устройства, увеличавайки сигурността в сравнение с обикновените SharedPreferences.

    // Създаване на 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
    )
    
    // Запазване на токена
    with(sharedPreferences.edit()) {
        putString("auth_token", "your_sensitive_token")
        apply()
    }
    
    // Четене на токена
    val authToken = sharedPreferences.getString("auth_token", null)
    
  2. Android Keystore System: Най-сигурният начин за съхранение на криптографски ключове и чувствителни данни. Ключовете се съхраняват в защитена област на устройството и не могат да бъдат извлечени от приложението. Keystore системата може да се използва за криптиране/декриптиране на токени, съхранявани в SharedPreferences или база данни.

    // Пример за получаване на ключ от Keystore (за API ниво 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
    // Използване на secretKey за криптиране/декриптиране на токена
    
  3. SQLite база данни (шифровани таблици или колони): Ако токените са много или са свързани с други данни, може да се използва локална база данни. За повишаване на сигурността данните с токени трябва да се съхраняват в шифровани колони или да се използва библиотека, която предоставя шифроване на цялата база данни (например, SQLCipher за Android).

    -- Пример за създаване на таблица с шифрована колона (зависи от библиотеката)
    CREATE TABLE users (
        id INTEGER PRIMARY KEY,
        username TEXT,
        auth_token BLOB -- Съхранение на шифрован токен
    );
    
  4. Памет на приложението (RAM): Само за временно съхранение на токена през кратък период от време, докато се използва в текущата сесия. След приключване на сесията или затваряне на приложението, токенът се извлича и съхранява по-безопасно. Не е подходящо за персистентно съхранение.

Изборът зависи от:

  • Конфиденциалността на токена: Колко чувствителен е токенът?
  • Размер на токена: Малките токени са по-удобни за съхранение в SharedPreferences или Keystore.
  • Време на живот на токена: Трябва ли токенът след затваряне на приложението?
  • Версия на Android: Поддръжката на Keystore и EncryptedSharedPreferences варира.

Препоръка: Комбинирайте Keystore за съхранение на ключа за криптиране с шифровани SharedPreferences или шифрована база данни за съхранение на самия токен. Това осигурява висок ниво на сигурност при относително лесна употреба.