Sobes.tech
Middle+

Başka bir uygulama için yetkilendirme jetonuna güvenli erişimi nasıl sağlayabilirsiniz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Birkaç yöntem göz önünde bulundurulabilir.

  1. Kısıtlı erişimli Content Provider: Kendi ContentProviderınızı oluşturun ve token alma mantığını uygulayın. Erişimi, uygulamanızın manifestinde tanımlanmış izinler (permissions) aracılığıyla sınırlandırın. Diğer uygulama, Content Provider'a erişim izni almak zorunda kalacaktır.

    <!-- Uygulamanızın AndroidManifest.xml dosyasında -->
    <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 örneği
    public class TokenContentProvider extends ContentProvider {
        // ... query() metodunu token döndürmek ve izinleri kontrol etmek için uygulayın ...
    }
    

    Diğer uygulama, bu iznin talebini bildirmelidir:

    <!-- Diğer uygulamanın AndroidManifest.xml dosyasında -->
    <uses-permission android:name="com.your_app.PERMISSION_GET_TOKEN" />
    

    protectionLevel="signature" seviyesi, sadece aynı anahtar ile imzalanmış uygulamaların Content Provider'a erişebileceğini garanti eder. Bu, aynı şirketin (aynı geliştirici) uygulamaları arasında veri alışverişi için en güvenli seçenektir.

  2. UID/PackageName doğrulamasıyla Service kullanımı: Bir Service oluşturun ve token almak için bir metod sağlayın. Diğer uygulama bu servise (bindService) bağlanabilir. Servis içinde, çağrı yapan uygulamanın UID veya PackageName'ini alıp, güvenilir olup olmadığını kontrol edebilirsiniz.

    // AIDL ile Service örneği
    public class TokenService extends Service {
        private ITokenService.Stub binder = new ITokenService.Stub() {
            @Override
            public String getToken() throws RemoteException {
                String[] packages = getPackageManager().getPackagesForUid(Binder.getCallingUid());
                if (isAllowedPackage(packages)) {
                    return "your_auth_token";
                } else {
                    throw new SecurityException("Yetkisiz erişim");
                }
            }
        };
    
        @Nullable
        @Override
        public IBinder onBind(Intent intent) {
            return binder;
        }
    }
    

    AIDL, inter-proses iletişim için servis arayüzünü tanımlamakte kullanılır.

  3. MODE_WORLD_READABLE ile SharedPreferences (tavsiye edilmez): Token'ı SharedPreferences'a MODE_WORLD_READABLE bayrağıyla kaydedin. Bu, herhangi bir uygulamanın bu dosyayı okuyabilmesine izin verir. Bu yöntem eski ve güvenlik açısından önerilmez.

    // Güvensiz yöntem (eski)
    SharedPreferences preferences = getSharedPreferences("token_prefs", Context.MODE_WORLD_READABLE);
    String token = preferences.getString("auth_token", null);
    
  4. İntent ile iletim ve kısıtlamalar: Token'ı Intent aracılığıyla iletin (örneğin, startActivity ile veri göndererek). Ancak, bu en az güvenli yöntemdir çünkü Intent içindeki veriler yakalanabilir. Token'ı bu şekilde göndermeniz gerekiyorsa, şifrelenmiş veriler kullanmalı ve dijital imza veya PackageName kontrolü yapmalısınız.

    // Örnek (ek güvenlik önlemleri gereklidir)
    Intent intent = new Intent("com.other_app.ACTION_RECEIVE_TOKEN");
    intent.putExtra("token", "your_auth_token"); // Token şifrelenmiş olmalı
    startActivity(intent);
    

Yöntem seçimi, güvenlik gereksinimlerine ve uygulamanız ile token erişimi gereken uygulama arasındaki güven seviyesine bağlıdır. En güvenli yöntemler Content Provider ve Service ile çağıranın doğrulanmasıdır.