Sobes.tech
Middle+

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.

  1. 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.

  2. UID/PackageName yoxlaması ilə bağlanan və xidmət göstərən Service: Token almaq üçün metod təqdim edən Service yaradı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.

  3. SharedPreferences və MODE_WORLD_READABLE rejimi (tövsiyə edilmir): Token-i SharedPreferences-də MODE_WORLD_READABLE bayrağı 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);
    
  4. İntent vasitəsilə ötürmə və məhdudiyyətlər: Token-i Intent vasitəsilə ötürün (məsələn, startActivity ilə 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.