Başqa bir tətbiq üçün təsdiqləmə tokeninə təhlükəsiz giriş necə təmin edilir?
sobes.tech Süni İntellekt
AI-dan cavab
Bir neçə üsulu nəzərdən keçirmək olar.
-
Məzmun təminatçısı ilə məhdud giriş: Öz
ContentProvider-inizi yaradın və giriş üçün loqikanı həyata keçirin. Ona giriş icazələri ilə məhdudiyyət qoyun, bunlar tətbiqinizin manifestində müəyyən ediləcək. Digər tətbiq bu icazəni tələb etməlidir ki, Content Provider-ə daxil ola bilsin.<!-- Tətbiqinizin AndroidManifest.xml-də --> <permission android:name="com.your_app.PERMISSION_GET_TOKEN" android:label="@string/permission_get_token_label" android:description="@string/permission_get_token_description" android:protectionLevel="signature" /> <application ...> <provider android:name=".TokenContentProvider" android:authorities="com.your_app.token_provider" android:exported="true" android:readPermission="com.your_app.PERMISSION_GET_TOKEN" ... /> </application>// ContentProvider-in nümunə tətbiqi public class TokenContentProvider extends ContentProvider { // ... token almaq üçün query() metodunun tətbiqi ... }Digər tətbiq bu icazəni elan etməlidir:
<!-- Digər tətbiqin AndroidManifest.xml-də --> <uses-permission android:name="com.your_app.PERMISSION_GET_TOKEN" />protectionLevel="signature"səviyyəsi, Content Provider-ə yalnız eyni açar ilə imzalanmış tətbiqlərin daxil ola biləcəyini təmin edir. Bu, eyni şirkətə aid tətbiqlər arasında məlumat mübadiləsi üçün ən təhlükəsiz variantdır. -
UID/PackageName yoxlaması ilə bağlanan və xidmət göstərən Service: Token almaq üçün metod təqdim edən
Serviceyaradın. Digər tətbiq bu xidmətə bağlana bilər (bindService). Xidmət daxilində, çağırış edən tətbiqin UID və ya PackageName yoxlanıla bilər və etibarlı olub-olmadığı müəyyən edilə bilər.// AIDL ilə Service nümunəsi public class TokenService extends Service { private ITokenService.Stub binder = new ITokenService.Stub() { @Override public String getToken() throws RemoteException { // getCallingUid() və ya getPackagesForUid() ilə çağıran tətbiqi yoxlama String[] packages = getPackageManager().getPackagesForUid(Binder.getCallingUid()); // İcazəli paketlər siyahısına uyğun olub-olmadığını yoxlama if (isAllowedPackage(packages)) { // Token-i qaytar (etibarlı şəkildə saxlanılırsa) return "your_auth_token"; } else { throw new SecurityException("İcazəsiz giriş"); } } }; @Nullable @Override public IBinder onBind(Intent intent) { return binder; } }AIDL (Android Interface Definition Language) xidmət interfeysini müəyyən etmək üçün istifadə olunur və proseslərarası əlaqə üçün nəzərdə tutulub.
-
SharedPreferences və
MODE_WORLD_READABLErejimi (tövsiyə edilmir): Token-iSharedPreferences-dəMODE_WORLD_READABLEbayrağı ilə saxlayın. Bu, hər hansı tətbiqin bu faylı oxumağa imkan verir. Bu metod köhnəlib və təhlükəsizlik səviyyəsi aşağı olduğundan istifadə edilmir.// Təhlükəsiz olmayan metod (köhnəlib) SharedPreferences preferences = getSharedPreferences("token_prefs", Context.MODE_WORLD_READABLE); String token = preferences.getString("auth_token", null); -
İntent vasitəsilə ötürmə və məhdudiyyətlər: Token-i
Intentvasitəsilə ötürün (məsələn,startActivityilə məlumatla). Ancaq bu ən az təhlükəsiz üsuldur, çünki Intent-dəki məlumatlar ələ keçirilə bilər. Əgər token-i bu şəkildə ötürmək lazımdırsa, şifrələnmiş məlumatlardan istifadə edin və digital imza və ya qəbul edən tətbiqin PackageName-ini yoxlayın.// Nümunə (əlavə təhlükəsizlik tədbirləri tələb edir) Intent intent = new Intent("com.other_app.ACTION_RECEIVE_TOKEN"); intent.putExtra("token", "your_auth_token"); // Token şifrələnməlidir startActivity(intent);
Metod seçimi təhlükəsizlik tələblərinə və tətbiqinizlə tətbiq arasında etibar səviyyəsinə bağlıdır. Ən təhlükəsiz olanlar Content Provider və açıq yoxlama ilə Service-dir.