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:
-
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) -
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 -
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 ); -
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
EncryptedSharedPreferencesatbalsts 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.