Sobes.tech
Middle

Tokenləri harada saxlayacaqsınız?

sobes.tech Süni İntellekt

AI-dan cavab

Android tətbiqində, xüsusən də gizli (API-yə giriş, istifadəçi sessiyaları) tokenlərin saxlanması üçün aşağıdakı yerləri nəzərdən keçirərəm:

  1. SharedPreferences (şifrələnmiş və ya EncryptedSharedPreferences istifadə edilərək): Kiçik tokenlər üçün uyğundur. EncryptedSharedPreferences (Təhlükəsizlik Kitabxanasının bir hissəsi) dəstəklənən cihazlarda hardware əsaslı şifrələmə təmin edir və adi SharedPreferences ilə müqayisədə təhlükəsizliyi artırır.

    // EncryptedSharedPreferences yaradılması
    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
    )
    
    // Tokenin saxlanması
    with(sharedPreferences.edit()) {
        putString("auth_token", "hissəli_tokeniniz")
        apply()
    }
    
    // Tokenin oxunması
    val authToken = sharedPreferences.getString("auth_token", null)
    
  2. Android Keystore Sistemi: Kriptografik açarların və həssas məlumatların saxlanması üçün ən təhlükəsiz yoldur. Açarlar cihazın qorunan sahəsində saxlanılır və tətbiqdən çıxarıla bilməz. Keystore sistemi, SharedPreferences və ya verilənlər bazasında saxlanan tokenlərin şifrələnməsi/şifrəsini açmaq üçün istifadə edilə bilər.

    // Keystore-dan açar əldə etməyin nümunəsi (API səviyyəsi 23+ üçün)
    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-dən tokenin şifrələnməsi/şifrəsini açmaq üçün istifadə
    
  3. SQLite Verilənlər Bazası (şifrələnmiş cədvəllər və ya sütunlar): Əgər çox sayda token varsa və ya digər məlumatlarla əlaqəlidirsə, yerli verilənlər bazasından istifadə edə bilərsiniz. Təhlükəsizliyi artırmaq üçün token məlumatlarını şifrələnmiş sütunlarda saxlamaq və ya bütün verilənlər bazasını şifrələyən kitabxana istifadə etmək (məsələn, SQLCipher for Android).

    -- Şifrələnmiş sütun ilə cədvəl yaratma nümunəsi (kitabxanadan asılıdır)
    CREATE TABLE users (
        id INTEGER PRIMARY KEY,
        username TEXT,
        auth_token BLOB -- Şifrələnmiş tokenin saxlanması
    );
    
  4. Tətbiq yaddaşı (RAM): Yalnız müvəqqəti olaraq, cari sessiyada tokeni saxlamaq üçün. Sessiya bitdikdən və ya tətbiq bağlandıqdan sonra token çıxarılır və daha təhlükəsiz şəkildə saxlanılır. Daimi saxlama üçün uyğun deyil.

Seçim aşağıdakı amillərə bağlıdır:

  • Tokenin gizlilik səviyyəsi: Token nə qədər həssasdır?
  • Tokenin ölçüsü: Kiçik tokenlər SharedPreferences və ya Keystore-da saxlamaq daha asandır.
  • Tokenin ömrü: Tətbiqi bağladıqdan sonra token lazım olacaqmı?
  • Android versiyaları: Keystore və EncryptedSharedPreferences dəstəyi dəyişə bilər.

Tövsiyə: Açar şifrələməsini saxlamaq üçün Keystore və şifrələnmiş SharedPreferences və ya şifrələnmiş verilənlər bazası ilə birləşdirin. Bu, yüksək təhlükəsizlik səviyyəsini təmin edir və istifadəsini asanlaşdırır.