Sobes.tech
Middle

Токенҳоро дар куҷо нигоҳ медоред?

sobes.tech AI

Ҷавоб аз AI

Барои нигоҳдории токенҳо, махсусан махфӣ (дастрасӣ ба API, сессияҳои корбар), дар барномаи Android ман ҷойҳои зеринро баррасӣ мекунам:

  1. SharedPreferences (шифршуда ё бо истифода аз EncryptedSharedPreferences): Барои токенҳои хурд мувофиқ аст. EncryptedSharedPreferences (қисми Kitobхонаи Амният) шифркунии сахтафзорро дар дастгоҳҳои дастгиришаванда таъмин мекунад, ки бехатариро нисбат ба 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. Системаи Keystore-и Android: Беҳтарини бехатар барои нигоҳдории клучҳои криптографӣ ва маълумоти ҳассос. Ключҳо дар минтақаи муҳофизатшудаи дастгоҳ нигоҳ дошта мешаванд ва аз барнома берун наметавонанд гирифта шаванд. Системаи 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 ё базаи додаҳои шифршудаи барои нигоҳдории худи токен истифода баред. Ин сатҳи баланди бехатариро таъмин мекунад бо истифодаи содда.