Sobes.tech
Middle

Որտե՞ղ եք պահելու տոքենները։

sobes.tech AI

Պատասխան AI-ից

Տոկենների պահպանումը, հատկապես գաղտնի (API մուտք, օգտվողի սեսիաներ), Android հավելվածում ես դիտարկում հետևյալ վայրերը:

  1. SharedPreferences (կոդավորված կամ օգտագործելով EncryptedSharedPreferences): Համապատասխան է փոքր տոքենների համար: EncryptedSharedPreferences (անվտանգության գրադարանի մաս) ապահովում է հագեցած կոդավորումը աջակցվող սարքերում, բարձրացնելով անվտանգության մակարդակը սովորական 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. Android Keystore համակարգը: Ամենաբարձր անվտանգությունը ապահովող միջոցը կոդավորական բանալիների և զգայուն տվյալների պահպանում: Բանալիները պահվում են սարքի պաշտպանված տարածքում և չեն կարող դուրս բերվել հավելվածից: 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 for Android):

    -- Օրինակ կոդավորող սյունակով աղյուսակի ստեղծում (կախված գրադարանից)
    CREATE TABLE users (
        id INTEGER PRIMARY KEY,
        username TEXT,
        auth_token BLOB -- Կոդավորված տոքենի պահպանում
    );
    
  4. Հավելվածի հիշողություն (RAM): Միայն ժամանակավոր պահեստավորում է տոքենը ընթացիկ սեսիայի ընթացքում: Սեսիայի ավարտից կամ հավելվածի փակվելուց հետո, տոքենը դուրս է բերվում և պահվում ավելի անվտանգ: Չի հարմարեցված մշտական պահեստավորման համար:

Ընտրությունը կախված է:

  • Տոքենի գաղտնիությունից: Որքան է զգայուն տոքենը:
  • Տոքենի չափից: Փոքր տոքենները ավելի հարմար են SharedPreferences կամ Keystore-ում պահելու համար:
  • Տոքենի կյանքի տևողությունից: Պետք է արդյոք տոքենը մնա հավելվածի փակվելուց հետո:
  • Android տարբերակներից: Keystore և EncryptedSharedPreferences աջակցությունը տարբեր է:

Առաջարկ: Համատեղեք Keystore-ը կոդավորման բանալի պահելու համար, որը կկոդավորի SharedPreferences-ը կամ ամբողջ տվյալների բազան, որպեսզի պահեք ինքն տոքենը: Դա ապահովում է բարձր մակարդակի անվտանգություն՝ բավականին պարզ օգտագործմամբ։