Sobes.tech
Middle

Tokenlarni qaerda saqlaysiz?

sobes.tech AI

AIdan javob

Android ilovasında API erişimi, foydalanuvchi sessiyalari kabi maxfiy tokenlarni saqlash uchun quyidagi joylarni ko'rib chiqaman:

  1. SharedPreferences (shifrlangan yoki EncryptedSharedPreferences bilan): Kichik tokenlar uchun mos. EncryptedSharedPreferences (Xavfsizlik Kutubxonasining bir qismi) qo'llab-quvvatlanadigan qurilmalarda apparat asosidagi shifrlashni ta'minlaydi va oddiy SharedPreferences ga qaraganda xavfsizlikni oshiradi.

    // EncryptedSharedPreferences yaratish
    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
    )
    
    // Tokenni saqlash
    with(sharedPreferences.edit()) {
        putString("auth_token", "maxfiy_tokeningiz")
        apply()
    }
    
    // Tokenni o'qish
    val authToken = sharedPreferences.getString("auth_token", null)
    
  2. Android Keystore Tizimi: Kriptografik kalitlar va maxfiy ma'lumotlarni saqlash uchun eng xavfsiz usul. Kalitlar qurilmaning himoyalangan hududida saqlanadi va ilovadan chiqarib bo'lmaydi. Keystore tizimini SharedPreferences yoki ma'lumotlar bazasida saqlangan tokenlarni shifrlash/ochish uchun ishlatish mumkin.

    // Keystore'dan kalit olish misoli (API 23+ uchun)
    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'dan tokenni shifrlash/ochish uchun foydalanish
    
  3. SQLite Ma'lumotlar Bazasi (shifrlangan jadvallar yoki ustunlar): Agar ko'p tokenlar bo'lsa yoki ular boshqa ma'lumotlar bilan bog'liq bo'lsa, mahalliy ma'lumotlar bazasidan foydalanish mumkin. Xavfsizlikni oshirish uchun token ma'lumotlarini shifrlangan ustunlarda saqlash yoki butun bazani shifrlashni ta'minlaydigan kutubxonadan foydalanish (masalan, SQLCipher for Android).

    -- Shifrlangan ustun bilan jadval yaratish misoli (kutubxonaga bog'liq)
    CREATE TABLE users (
        id INTEGER PRIMARY KEY,
        username TEXT,
        auth_token BLOB -- Shifrlangan tokenni saqlash
    );
    
  4. Ilova xotirasi (RAM): Faqat vaqtinchalik, joriy sessiyada tokenni saqlash uchun. Sessiya tugagach yoki ilovani yopgach, token chiqariladi va xavfsizroq saqlanadi. Doimiy saqlash uchun mos emas.

Tanlov quyidagilarga bog'liq:

  • Tokenning maxfiyligi: Token qanchalik maxfiy?
  • Tokenning hajmi: Kichik tokenlar SharedPreferences yoki Keystore ga saqlash uchun qulay.
  • Tokenning yashash muddati: Ilovani yopgach, token kerakmi?
  • Android versiyalari: Keystore va EncryptedSharedPreferences qo'llab-quvvatlash farq qiladi.

Tavsiya: Kalitni shifrlash uchun Keystore bilan shifrlangan SharedPreferences yoki shifrlangan ma'lumotlar bazasini birlashtirish. Bu yuqori xavfsizlikni ta'minlaydi va foydalanish osonroq bo'ladi.