Sobes.tech
Middle

Wo werden Sie die Tokens speichern?

sobes.tech KI

Antwort von AI

Um Tokens, insbesondere vertrauliche (API-Zugriff, Benutzersitzungen), in einer Android-Anwendung zu speichern, ziehe ich folgende Orte in Betracht:

  1. SharedPreferences (verschlüsselt oder mit EncryptedSharedPreferences) : Geeignet für kleine Tokens. EncryptedSharedPreferences (Teil der Security Library) bietet hardwarebasiertes Verschlüsselung auf unterstützten Geräten und erhöht die Sicherheit im Vergleich zu normalen SharedPreferences.

    // Erstellen von 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
    )
    
    // Token speichern
    with(sharedPreferences.edit()) {
        putString("auth_token", "dein_sensitiver_token")
        apply()
    }
    
    // Token lesen
    val authToken = sharedPreferences.getString("auth_token", null)
    
  2. Android Keystore System: Der sicherste Weg, kryptografische Schlüssel und sensible Daten zu speichern. Schlüssel werden in einem geschützten Bereich des Geräts gespeichert und können nicht aus der Anwendung extrahiert werden. Das Keystore-System kann zum Verschlüsseln/Entschlüsseln von Tokens verwendet werden, die in SharedPreferences oder einer Datenbank gespeichert sind.

    // Beispiel zum Abrufen eines Schlüssels aus dem Keystore (für API Level 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
    // Verwendung von secretKey zum Verschlüsseln/Entschlüsseln des Tokens
    
  3. SQLite-Datenbank (verschlüsselte Tabellen oder Spalten): Wenn viele Tokens vorhanden sind oder sie mit anderen Daten verbunden sind, kann eine lokale Datenbank verwendet werden. Für erhöhte Sicherheit sollten die Token-Daten in verschlüsselten Spalten gespeichert oder eine Bibliothek verwendet werden, die die Verschlüsselung der gesamten Datenbank bereitstellt (z.B. SQLCipher für Android).

    -- Beispiel für das Erstellen einer Tabelle mit verschlüsselter Spalte (abhängig von der Bibliothek)
    CREATE TABLE users (
        id INTEGER PRIMARY KEY,
        username TEXT,
        auth_token BLOB -- Verschlüsselter Token-Speicher
    );
    
  4. Anwendungs-Speicher (RAM): Nur für temporäres Speichern des Tokens während einer kurzen Nutzungsdauer in der aktuellen Sitzung. Nach Beendigung der Sitzung oder Schließen der Anwendung wird der Token extrahiert und sicherer gespeichert. Nicht geeignet für persistente Speicherung.

Die Wahl hängt ab von:

  • Vertraulichkeit des Tokens: Wie sensibel ist das Token?
  • Größe des Tokens: Kleine Tokens lassen sich leichter in SharedPreferences oder Keystore speichern.
  • Lebensdauer des Tokens: Wird das Token nach Schließen der Anwendung benötigt?
  • Android-Versionen: Die Unterstützung von Keystore und EncryptedSharedPreferences variiert.

Empfehlung: Den Keystore zur Speicherung des Verschlüsselungsschlüssels mit verschlüsselten SharedPreferences oder einer verschlüsselten Datenbank kombinieren, um das eigentliche Token zu speichern. Dies gewährleistet ein hohes Sicherheitsniveau bei relativ einfacher Handhabung.