Cihaz yönetimi politikalarıyla güvenliği artırma

Cihaz yöneticisi desteğinin sonlandırılması. Bazı yönetici politikaları çağrıldığında desteği sonlandırıldı olarak işaretlendi cihaz yöneticisi tarafından. Daha fazla bilgi edinmek ve taşıma seçeneklerini görmek için bkz. Cihaz yöneticisi desteğinin sonlandırılması.

Android 2.2 (API düzeyi 8) sürümünden itibaren, Android platformu sistem düzeyinde cihaz yönetimi sunar. özelliklerini kullanarak yeni özellikler elde edebilirsiniz.

Bu derste, cihaz yönetimi politikalarını zorunlu kılarak. Daha ayrıntılı belirtmek gerekirse, uygulama cihaz görüntülenmeden önce yeterli güçte bir ekran kilidi şifresinin ayarlandığından emin olun. kullanıcıya kısıtlanmış içerik sunar.

Politikanızı tanımlama ve beyan etme

İlk olarak, işlevsel düzeyde desteklenecek politika türlerini tanımlamanız gerekir. Politikalar ekran kilidi şifre gücünü, geçerlilik sonu zaman aşımını, şifrelemeyi vb. kapsama

Uygulama tarafından zorunlu kılınacak seçili politika grubunu res/xml/device_admin.xml dosyası yükleyin. Android manifest'inde aynı zamanda belirtilen politika ayarı.

Beyan edilen her politika, DevicePolicyManager ürününde belirli sayıda ilgili cihaz politikası yöntemine karşılık gelir (minimum şifre uzunluğunu ve minimum şifre sayısını tanımlar büyük harfli karakterler iki örnektir.) Bir uygulama, ilgili politika XML'de bildirilmez. Bu durum, çalışma zamanında bir SecurityException ile sonuçlanır. Diğer izinler Uygulama, yönetmeyi amaçlıyorsa force-lock gibi izin vermez. Daha sonra göreceğiniz gibi, cihaz yöneticisi etkinleştirme işleminin bir parçası olarak beyan edilen politikaların listesi, kullanıcıya sistem ekranında sunulur.

Aşağıdaki snippet, res/xml/device_admin.xml bölgesinde şifre sınırlama politikasını tanımlar:

<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-policies>
        <limit-password />
    </uses-policies>
</device-admin>

Android manifest dosyasında referans verilen politika beyanı XML'i:

<receiver android:name=".Policy$PolicyAdmin"
    android:permission="android.permission.BIND_DEVICE_ADMIN">
    <meta-data android:name="android.app.device_admin"
        android:resource="@xml/device_admin" />
    <intent-filter>
        <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
    </intent-filter>
</receiver>

Cihaz yönetimi alıcısı oluşturma

Desteklediğini beyan ettiğiniz politikalarla ilgili etkinlikler hakkında bildirim alacak bir Cihaz Yönetimi yayın alıcı oluşturun. Bir uygulama, geri çağırma yöntemlerini seçerek geçersiz kılabilir.

Örnek uygulamada (Cihaz Yöneticisi) cihaz yöneticisi, kullanıcının yapılandırdığı politika, paylaşılan tercihten silinir. Veri feed'i oluştururken uygun iş mantığı oluşturma sürecidir. Örneğin, uygulamanın tamamlanması Güvenlik riskini azaltmak için, cihazı, uzaktan senkronizasyonu devre dışı bırakma, yöneticiyi uyarma vb.

Yayın alıcının çalışması için, bunu yukarıdaki snippet'te gösterildiği gibi Android manifest'ine kaydettiğinizden emin olun.

Kotlin

class PolicyAdmin : DeviceAdminReceiver() {

    override fun onDisabled(context: Context, intent: Intent) {
        // Called when the app is about to be deactivated as a device administrator.
        // Deletes previously stored password policy.
        super.onDisabled(context, intent)
        context.getSharedPreferences(APP_PREF, Activity.MODE_PRIVATE).edit().apply {
            clear()
            apply()
        }
    }
}

Java

public static class PolicyAdmin extends DeviceAdminReceiver {

    @Override
    public void onDisabled(Context context, Intent intent) {
        // Called when the app is about to be deactivated as a device administrator.
        // Deletes previously stored password policy.
        super.onDisabled(context, intent);
        SharedPreferences prefs = context.getSharedPreferences(APP_PREF, Activity.MODE_PRIVATE);
        prefs.edit().clear().commit();
    }
}

Cihaz yöneticisini etkinleştirme

Herhangi bir politikayı zorunlu kılmadan önce, kullanıcının uygulamayı cihaz olarak manuel olarak etkinleştirmesi gerekir yönetici izni gerekir. Aşağıdaki snippet, etkinleştirebileceği anlamına gelir. Belgenize ön plana çıkaracak açıklayıcı metin eklemek iyi bir uygulamadır. uygulamanın neden cihaz yöneticisi olmak istediğini kullanıcılara göstermek için Amaç fazladan EXTRA_ADD_EXPLANATION.

Şekil 1. Bu ekranda, cihaz politikalarınızın bir açıklamasını girin.

Kotlin

if (!policy.isAdminActive()) {

    val activateDeviceAdminIntent = Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN)

    activateDeviceAdminIntent.putExtra(
            DevicePolicyManager.EXTRA_DEVICE_ADMIN,
            policy.getPolicyAdmin()
    )

    // It is good practice to include the optional explanation text to
    // explain to user why the application is requesting to be a device
    // administrator. The system will display this message on the activation
    // screen.
    activateDeviceAdminIntent.putExtra(
            DevicePolicyManager.EXTRA_ADD_EXPLANATION,
            resources.getString(R.string.device_admin_activation_message)
    )

    startActivityForResult(activateDeviceAdminIntent, REQ_ACTIVATE_DEVICE_ADMIN)
}

Java

if (!policy.isAdminActive()) {

    Intent activateDeviceAdminIntent =
        new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);

    activateDeviceAdminIntent.putExtra(
        DevicePolicyManager.EXTRA_DEVICE_ADMIN,
        policy.getPolicyAdmin());

    // It is good practice to include the optional explanation text to
    // explain to user why the application is requesting to be a device
    // administrator. The system will display this message on the activation
    // screen.
    activateDeviceAdminIntent.putExtra(
        DevicePolicyManager.EXTRA_ADD_EXPLANATION,
        getResources().getString(R.string.device_admin_activation_message));

    startActivityForResult(activateDeviceAdminIntent,
        REQ_ACTIVATE_DEVICE_ADMIN);
}

Kullanıcı "Etkinleştir"i seçerse Uygulama, cihaz yöneticisi olur ve Politika'yı yapılandırmak ve uygulamaktır.

Uygulamanın, kullanıcının uygulamayı terk ettiği geçmiş durumları yönetmek için de hazır olması gerekir. İptal düğmesine, Geri tuşuna veya Ana Ekran tuşuna basarak etkinleştirme işlemini tamamlayın. Dolayısıyla, Politika Kurulum Etkinliği'nde onResume() mantığı olmalıdır durumu yeniden değerlendirmek ve gerekir.

Cihaz politikası denetleyiciyi uygulama

Cihaz yöneticisi başarıyla etkinleştirildikten sonra uygulama, Cihaz'ı yapılandırır. İstenen politikaya sahip Politika Yöneticisi. Lütfen Her sürümle birlikte Android. hem de yeni politikalar uygulayarak platformun eski sürümlerini destekler. Örneğin, Minimum Şifre Büyük Harf Politikası, yalnızca API düzeyi 11 (Honeycomb) ve sonraki sürümlerde kullanılabilir. Aşağıdaki kod çalışma zamanında sürümü nasıl kontrol edebileceğinizi gösterir.

Kotlin

private lateinit var dpm: DevicePolicyManager
private lateinit var policyAdmin: ComponentName

dpm = context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
policyAdmin = ComponentName(context, PolicyAdmin::class.java)

dpm.apply {
    setPasswordQuality(policyAdmin, PASSWORD_QUALITY_VALUES[passwordQuality])
    setPasswordMinimumLength(policyAdmin, passwordLength)
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        setPasswordMinimumUpperCase(policyAdmin, passwordMinUpperCase)
    }
}

Java

DevicePolicyManager dpm = (DevicePolicyManager)
        context.getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName policyAdmin = new ComponentName(context, PolicyAdmin.class);

dpm.setPasswordQuality(policyAdmin, PASSWORD_QUALITY_VALUES[passwordQuality]);
dpm.setPasswordMinimumLength(policyAdmin, passwordLength);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    dpm.setPasswordMinimumUpperCase(policyAdmin, passwordMinUpperCase);
}

Uygulama bu noktada politikayı zorunlu kılabilir. Uygulamanın erişiminin olmaması durumunda veya şifre değiştirme işlemini gerçekleştirdiğinden, Device Policy Manager API'si aracılığıyla mevcut şifrenin gerekli politikaya uygun olup olmadığını kontrol edin. Mevcut durumda ekran kilidi şifresi yeterli değil, cihaz yönetimi API'si otomatik olarak düzeltici eylemdir. Sistemi açıkça kullanıma sunmak uygulamanın sorumluluğundadır. şifre değiştirme ekranını seçin. Örnek:

Kotlin

if (!dpm.isActivePasswordSufficient) {
    // Triggers password change screen in Settings.
    Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD).also { intent ->
        startActivity(intent)
    }
}

Java

if (!dpm.isActivePasswordSufficient()) {
    ...
    // Triggers password change screen in Settings.
    Intent intent =
        new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
    startActivity(intent);
}

Normalde, kullanıcı Hiçbiri, Desen veya Desen gibi mevcut kilit mekanizmaları arasından seçim yapabilir. PIN (sayısal) veya Şifre (alfasayısal). Bir şifre politikası yapılandırıldığında bu şifreler politikada tanımlananlardan daha zayıf olan türler devre dışı bırakılır. Örneğin, "Sayısal" şifre kalitesi yapılandırıldığında, kullanıcı PIN (sayısal) veya Şifre seçebilir (alfasayısal) şifre kullanabilir.

Uygulama, uygun bir ekran kilidi şifresi ayarlanarak cihazı gerektiği gibi güvence altına güvenli içeriğe erişime izin verir.

Kotlin

when {
    !dpm.isAdminActive(policyAdmin) -> {
        // Activates device administrator.
        ...
    }
    !dpm.isActivePasswordSufficient -> {
        // Launches password set-up screen in Settings.
        ...
    }
    else -> {
        // Grants access to secure content.
        ...
        startActivity(Intent(context, SecureActivity::class.java))
    }
}

Java

if (!dpm.isAdminActive(..)) {
    // Activates device administrator.
    ...
} else if (!dpm.isActivePasswordSufficient()) {
    // Launches password set-up screen in Settings.
    ...
} else {
    // Grants access to secure content.
    ...
    startActivity(new Intent(context, SecureActivity.class));
}