Güvenlik

Bu kılavuzdaki özellikler, kullanabileceğiniz güvenlik yönetimi özelliklerini açıklar cihaz politikası denetleyici (DPC) uygulamanızda uygulayın. Bu doküman kod örnekleri içerir ve ayrıca Test DPC uygulamasını Android'in kurumsal özellikleri için örnek kod kaynağı.

Bir DPC uygulaması kişisel cihazlarda veya cihaz sahibinde profil sahibi modunda çalışabilir modunda kullanabilirsiniz. Bu tabloda, hangi özelliklerin kullanılabildiğini gösterir DPC profil sahibi modunda veya cihaz sahibi modunda çalıştığında:

Özellik Profil sahibi Cihaz sahibi
Uygulamalara erişimi devre dışı bırakma
Bilinmeyen kaynaklardan gelen uygulamaları engelleme
Google Play'de hesapları kısıtlama
Kurumsal fabrika ayarlarına sıfırlama korumasını etkinleştirme
Kurumsal işlem günlüklerini ve uzaktan hata raporlarını izleme
İstemci sertifikasına erişim verme ve erişimi kaldırma
Güvenli şifre kodu sıfırlama
İş profili güvenlik sorusu

Uygulamalara erişimi devre dışı bırakın

Çalışanların oyun oynamasını veya içerik izlemesini engellemek isteyen kuruluşlar Günün belirli saatlerinde Android destekli cihazlarında YouTube'a veya DPC, haftanın belirli günlerinde uygulamalara erişimi geçici olarak devre dışı bırakabilir.

Uygulamalara erişimi devre dışı bırakmak için cihaz sahibi veya profil sahibi modunda çalışan bir DPC setPackagesSuspended() ayarlarını yapılandırır ve seçilen uygulama devre dışıdır (Google başlatıcısı uygulamayı devre dışı bırakır). Kullanıcı uygulamaya dokunduğunda, uygulamanın askıya alındığını belirten bir sistem iletişim kutusu görürler.

Bir uygulama askıya alındığında etkinlik başlatamaz ve atlanır. Askıya alınan paketler genel bakışta görünmez ekranda, iletişim kutuları (kısa mesaj ve atıştırmalık çubukları dahil) gösteremez ve ses çalamaz veya cihazı titretemez.

Başlatıcılar, isPackageSuspended() yöntemini kullanabilirsiniz. Uygulamanın nasıl yapılandırılacağıyla ilgili ayrıntılar için askıya alınma durumu için bkz. setPackagesSuspended.

Bilinmeyen kaynaklardan gelen uygulamaları engelleyin

Google Play'den (veya diğer güvenilir uygulama mağazalarından) yüklenmemiş uygulamalar, bilinmeyen kaynaklardan uygulamalar olarak adlandırılır. Cihazlar ve veriler daha yüksek risk altında olabilir kullanıcılar bu uygulamaları yüklediğinde.

Birilerinin bilinmeyen kaynaklardan uygulama yüklemesini engellemek için tümüyle yönetilen cihazlar ve iş profilleri, DISALLOW_INSTALL_UNKNOWN_SOURCES kullanıcı kısıtlaması.

İş profili için cihaz genelinde kısıtlama

Bir iş profilinin yöneticisi DISALLOW_INSTALL_UNKNOWN_SOURCES eklediğinde, kısıtlama yalnızca iş profili için geçerlidir. Ancak işin yöneticisi bir ayar belirleyerek cihaz genelinde bir kısıtlama uygulayabilirsiniz. Google Play için yönetilen yapılandırma. Cihaz genelinde kısıtlama Android 8.0 (veya sonraki sürümler) yüklü olan Google Play uygulaması Sürüm 80812500 veya daha yeni bir sürüm.

Uygulama yüklemelerini Google Play ile kısıtlamak için aşağıdaki adımları izleyin:

  1. Google Play paketi için yönetilen yapılandırma paketi ayarlama com.android.vending
  2. Pakette verify_apps:device_wide_unknown_source_block tuşu.
  3. ENSURE_VERIFY_APPS kullanıcı kısıtlamasını ekleyin.

Aşağıdaki örnekte, Google Play'in bunu destekleyip desteklemediğini nasıl kontrol edebileceğiniz gösterilmektedir ayarını seçin ve değeri true olarak ayarlayın:

Kotlin

internal val DEVICE_WIDE_UNKNOWN_SOURCES = "verify_apps:device_wide_unknown_source_block"
internal val GOOGLE_PLAY_APK = "com.android.vending"

// ...

// Add the setting to Google Play's existing managed config. Supported in
// Google Play version 80812500 or higher--older versions ignore unsupported
// settings.
val dpm = context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
var existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK)
val newConfig = Bundle(existingConfig)
newConfig.putBoolean(DEVICE_WIDE_UNKNOWN_SOURCES, true)
dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig)

// Make sure that Google Play Protect verifies apps.
dpm.addUserRestriction(adminName, UserManager.ENSURE_VERIFY_APPS)
dpm.addUserRestriction(adminName, UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES)

Java

static final String DEVICE_WIDE_UNKNOWN_SOURCES =
    "verify_apps:device_wide_unknown_source_block";
static final String GOOGLE_PLAY_APK = "com.android.vending";

// ...


// Add the setting to Google Play's existing managed config. Supported in
// Google Play version 80812500 or higher--older versions ignore unsupported
// settings.
DevicePolicyManager dpm =
    (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
Bundle existingConfig =
    dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK);
Bundle newConfig = new Bundle(existingConfig);
newConfig.putBoolean(DEVICE_WIDE_UNKNOWN_SOURCES, true);
dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig);

// Make sure that Google Play Protect verifies apps.
dpm.addUserRestriction(adminName, UserManager.ENSURE_VERIFY_APPS);
dpm.addUserRestriction(adminName, UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES);

Sistem ayarlarındaki kullanıcı arayüzü etkin kalır ancak sistem, nasıl kullanacağınızı göstereceğim. Bu kısıtlama, daha önce yüklenmiş olan yüklemeleri etkiler yüklü uygulamalar cihazda kalır. Cihaz kullanıcıları uygulama yüklemeye devam edebilir Android Debug Bridge (adb) kullanarak kişisel profile.

Bilinmeyen kaynaklar hakkında daha fazla bilgi edinmek için Alternatif dağıtım başlıklı makaleyi okuyun. seçenekleri bulabilirsiniz.

Google Play'de hesapları kısıtlama

Bazen bir kuruluş, kullanıcıların kişisel Google Hesaplar (örneğin, Gmail'de postaları okumak için) ancak kişisel e-posta hesabı kullanabilirsiniz. DPC'niz, kişilerin kullanabileceği hesapların listesini ayarlayabilir Google Play

Tümüyle yönetilen cihazların veya iş profillerinin yönetici bileşenleri, Google Play'de yönetilen bir yapılandırma ayarlayarak diğer hesapları yönetin. Hesap kısıtlama, yüklü Google Play uygulamasının sürümü 80970100 olduğunda geçerli olur veya daha yüksek olabilir.

Google Play'de hesapları sınırlandırmak için aşağıdakileri yapın:

  1. Google Play paketi için yönetilen yapılandırma paketi ayarlama com.android.vending
  2. Pakette, virgülle ayrılmış e-posta adreslerini allowed_accounts tuşuna basın.

Aşağıdaki örnekte hesapları nasıl sınırlayabileceğiniz gösterilmektedir:

Kotlin

internal val ALLOWED_ACCOUNTS = "allowed_accounts"
internal val GOOGLE_PLAY_APK = "com.android.vending"

// ...

// Limit Google Play to one work and one personal account. Use
// a comma-separated list of account email addresses (usernames).
val googleAccounts = "ali@gmail.com,ali.connors@example.com"

// Supported in Google Play version 80970100 or higher.
val existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK)
val newConfig = Bundle(existingConfig)
newConfig.putString(ALLOWED_ACCOUNTS, googleAccounts)
dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig)

Java

static final String ALLOWED_ACCOUNTS = "allowed_accounts";
static final String GOOGLE_PLAY_APK = "com.android.vending";

// ...


// Limit Google Play to one work and one personal account. Use
// a comma-separated list of account email addresses (usernames).
String googleAccounts = "ali@gmail.com,ali.connors@example.com";

// Supported in Google Play version 80970100 or higher.
Bundle existingConfig =
    dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK);
Bundle newConfig = new Bundle(existingConfig);
newConfig.putString(ALLOWED_ACCOUNTS, googleAccounts);
dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig);

Google Play'i yalnızca iş hesabıyla sınırlamak için allowed_accounts öğesini yönetilen tek bir hesap oluşturabilirsiniz. boş dize, kullanıcıların Google Play'de herhangi bir hesap kullanmasını engeller.

Kurumsal fabrika ayarlarına sıfırlama korumasını etkinleştirme

Kuruluşlar, kurumsal fabrika ayarlarına sıfırlama korumasını kullanarak hangi Google Hesapları, fabrika ayarlarına sıfırlanmış bir cihazın temel hazırlığını yapabilir.

Tüketici fabrika ayarlarına sıfırlama koruması, cihaz hırsızlığını engellemek için tasarlanmıştır. Şu tarihten önce: yetkisiz fabrika ayarlarına sıfırlama işleminden sonra cihazın temel hazırlığını yapmasına izin vermek EMM kullanıyorsanız kurulum sihirbazı, kullanıcının herhangi bir Daha önce cihazın kişisel profilinde bulunan Google Hesapları.

Fabrika ayarlarına sıfırlama, kurumsal ortamlarda çalışanların Bir çalışan kuruluştan ayrıldığında çalışan cihazları. Ancak, Kuruluş, çalışanın hesap kimlik bilgilerini bilmiyor, fabrika ayarlarına sıfırla koruma, kuruluşun başka bir cihaza cihaz vermesini engelleyebilir bir kontrol noktası görevi görebilir.

Fabrika ayarlarına sıfırlama işleminden sonra temel hazırlığı kontrol etme

Cihaz sahibi modunda çalışırken DPC'niz setFactoryResetProtectionPolicy() Fabrika ayarlarına sıfırlama işleminden sonra bir cihazın temel hazırlığını yapma yetkisi. Bu yapılandırma null olarak ayarlandığında veya boş listeye ayarlandığında, temel hazırlığı cihazın kişisel profilindeki hesaplar, fabrika ayarlarına sıfırlama işleminden sonra olanak tanır.

DPC bu hesapları tümüyle yönetilen bir kullanım ömrü boyunca yapılandırabilir olanak tanır.

  1. BT yöneticisi, People API'den people.get yöntemini kullanabilir me özel değeriyle. Bu,userId giriş yapılmış hesaba. userID, resourceName anahtarında döndürülür. bir tam sayı dizesi olarak people/[userId] biçimini kullanın. Yeni oluşturulan hesaplar 72 saat boyunca fabrika ayarlarına sıfırlama amacıyla kullanılamaz.
  2. Bir veya daha fazla BT yöneticisinin cihazın kilidinin açılması için fabrika ayarlarına sıfırlama işlemi yapabilirsiniz. Bu BT yöneticilerinin her birinin kendi Google Hesabına giriş yapmasını ve Ayrıca, bunları ekleyebilmek için 1. adımı uygulayın ve userId hesabını sizinle paylaşın userIds.
  3. DPC, aşağıdakileri kullanarak uygun bir uygulama kısıtlaması ayarlar: şunları yapabilecek userId listesini ayarlamak için setFactoryResetProtectionPolicy() fabrika ayarlarına sıfırlanmış bir cihazın temel hazırlığını yapma.
  4. DPC, fabrikadan sonra cihazların temel hazırlığını yapabilen hesapları etkinleştirir yayını göndererek sıfırlayabilirsiniz. com.google.android.gms.auth.FRP_CONFIG_CHANGED: uygulamanın arka plan kısıtlamalarından dolayı düşürülmesini önleyebilirsiniz.

Kotlin

const val ACTION_FRP_CONFIG_CHANGED =
    "com.google.android.gms.auth.FRP_CONFIG_CHANGED"
const val GMSCORE_PACKAGE = "com.google.android.gms"

// ...

// List of userId that can provision a factory reset device.
// You can use the value returned calling people/me endpoint.
val accountIds = listOf("000000000000000000000")

dpm.setFactoryResetProtectionPolicy(
    adminName,
    FactoryResetProtectionPolicy.Builder()
        .setFactoryResetProtectionAccounts(accountIds)
        .setFactoryResetProtectionEnabled(true)
        .build()
)

val frpChangedIntent = Intent(ACTION_FRP_CONFIG_CHANGED)

frpChangedIntent.setPackage(GMSCORE_PACKAGE)
context.sendBroadcast(frpChangedIntent)

Java

static final String ACTION_FRP_CONFIG_CHANGED =
    "com.google.android.gms.auth.FRP_CONFIG_CHANGED";
static final String GMSCORE_PACKAGE = "com.google.android.gms";

// ...

// List of userId that can provision a factory reset device.
// You can use the value returned calling people/me endpoint.
List<String> accountIds = new ArrayList<String>();
accountIds.add("000000000000000000000");

dpm.setFactoryResetProtectionPolicy(
    adminName,
    new FactoryResetProtectionPolicy.Builder()
        .setFactoryResetProtectionAccounts(accountIds)
        .setFactoryResetProtectionEnabled(true)
        .build());

Intent frpChangedIntent = new Intent(ACTION_FRP_CONFIG_CHANGED);

frpChangedIntent.setPackage(GMSCORE_PACKAGE);
context.sendBroadcast(frpChangedIntent);

Eski

Şununla birlikte sunulan, setFactoryResetProtectionPolicy() ürününü kullanamayan cihazlar için: API düzeyi 30, DPC'niz setApplicationRestrictions kullanarak seçilen hesapları factoryResetProtectionAdmin yönetilen yapılandırmasına (com.google.android.gms paketi için)

Kotlin

const val GOOGLE_PLAY_APK = "com.android.vending"
const val FACTORY_RESET_PROTECTION_ADMIN = "factoryResetProtectionAdmin"
const val DISABLE_FACTORY_RESET_PROTECTION_ADMIN = "disableFactoryResetProtectionAdmin"
const val GMSCORE_PACKAGE = "com.google.android.gms"

// ...

val existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK)
val newConfig = Bundle(existingConfig)
newConfig.putBoolean(DISABLE_FACTORY_RESET_PROTECTION_ADMIN, false)
newConfig.putString(FACTORY_RESET_PROTECTION_ADMIN, googleAccounts)
dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig)

val frpChangedIntent = Intent(ACTION_FRP_CONFIG_CHANGED)

frpChangedIntent.setPackage(GMSCORE_PACKAGE)
context.sendBroadcast(frpChangedIntent)

Java

static final String GOOGLE_PLAY_APK = "com.android.vending";
static final String FACTORY_RESET_PROTECTION_ADMIN = "factoryResetProtectionAdmin";
static final String DISABLE_FACTORY_RESET_PROTECTION_ADMIN = "disableFactoryResetProtectionAdmin";
static final String GMSCORE_PACKAGE = "com.google.android.gms";

// ...

Bundle existingConfig =
        dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK);
Bundle newConfig = new Bundle(existingConfig);
newConfig.putBoolean(DISABLE_FACTORY_RESET_PROTECTION_ADMIN, false);
newConfig.putStringArray(FACTORY_RESET_PROTECTION_ADMIN,
        accountIds.toArray(new String[accountIds.size()]));
dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig);

Intent frpChangedIntent = new Intent(ACTION_FRP_CONFIG_CHANGED);

frpChangedIntent.setPackage(GMSCORE_PACKAGE);
context.sendBroadcast(frpChangedIntent);

Kurumsal fabrika ayarlarına sıfırlama korumasını devre dışı bırak

Fabrika ayarlarına sıfırlama korumasını devre dışı bırakmak için DPC'niz setFactoryResetProtectionPolicy()null değerini iletmenizi sağlar.

Kotlin

const val ACTION_FRP_CONFIG_CHANGED =
    "com.google.android.gms.auth.FRP_CONFIG_CHANGED"
const val GMSCORE_PACKAGE = "com.google.android.gms"

// ...

dpm.setFactoryResetProtectionPolicy(adminName, null)

val frpChangedIntent = Intent(ACTION_FRP_CONFIG_CHANGED)

frpChangedIntent.setPackage(GMSCORE_PACKAGE)
context.sendBroadcast(frpChangedIntent)

Java

static final String ACTION_FRP_CONFIG_CHANGED =
    "com.google.android.gms.auth.FRP_CONFIG_CHANGED";
static final String GMSCORE_PACKAGE = "com.google.android.gms";

// ...

dpm.setFactoryResetProtectionPolicy(adminName, null);

Intent frpChangedIntent = new Intent(ACTION_FRP_CONFIG_CHANGED);

frpChangedIntent.setPackage(GMSCORE_PACKAGE);
context.sendBroadcast(frpChangedIntent);

Eski

Şununla birlikte sunulan, setFactoryResetProtectionPolicy() ürününü kullanamayan cihazlar için: API düzeyi 30, DPC'niz setApplicationRestrictions kullanarak anahtar ayarlayabilir disableFactoryResetProtectionAdmin içinde true değeri com.google.android.gms paketinin yapılandırması.

Kotlin

const val GOOGLE_PLAY_APK = "com.android.vending"
const val FACTORY_RESET_PROTECTION_ADMIN = "factoryResetProtectionAdmin"
const val DISABLE_FACTORY_RESET_PROTECTION_ADMIN = "disableFactoryResetProtectionAdmin"
const val GMSCORE_PACKAGE = "com.google.android.gms"

// ...

val existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK)
val newConfig = Bundle(existingConfig)
newConfig.putBoolean(DISABLE_FACTORY_RESET_PROTECTION_ADMIN, true)

dpm.setApplicationRestrictions(
    adminName, GOOGLE_PLAY_SERVICES_PACKAGE, restrictions
)

val frpChangedIntent = Intent(ACTION_FRP_CONFIG_CHANGED)

frpChangedIntent.setPackage(GMSCORE_PACKAGE)
context.sendBroadcast(frpChangedIntent)

Java

static final String GOOGLE_PLAY_APK = "com.android.vending";
static final String FACTORY_RESET_PROTECTION_ADMIN = "factoryResetProtectionAdmin";
static final String DISABLE_FACTORY_RESET_PROTECTION_ADMIN = "disableFactoryResetProtectionAdmin";
static final String GMSCORE_PACKAGE = "com.google.android.gms";

// ...

Bundle existingConfig =
        dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK);
Bundle newConfig = new Bundle(existingConfig);
newConfig.putBoolean(DISABLE_FACTORY_RESET_PROTECTION_ADMIN, true);

dpm.setApplicationRestrictions(
    adminName, GOOGLE_PLAY_SERVICES_PACKAGE, restrictions);

Intent frpChangedIntent = new Intent(ACTION_FRP_CONFIG_CHANGED);

frpChangedIntent.setPackage(GMSCORE_PACKAGE);
context.sendBroadcast(frpChangedIntent);

Kurumsal işlem günlüklerini ve uzaktan hata raporlarını izleme

Bir yönetici, EMM konsolunuzda kurumsal cihazları kullanarak tümüyle yönetilen cihazları izleyebilir ve uzaktan hata raporlarını işlemesini öğretir.

Kurumsal cihaz etkinliğini günlüğe kaydet

Cihaz sahibi modunda çalışan bir DPC, şüpheli etkinlikleri uzaktan tespit edebilir ve uygulama başlatma, Android Debug Bridge (adb) dahil cihaz etkinliğini izleme etkinlik ve ekran kilidini açma. İşlem günlükleri için kullanıcı izni gerekmez.

Günlük kaydını etkinleştirmek veya devre dışı bırakmak için DPC, setSecurityLoggingEnabled() yöntemini çağırır.

Yeni bir günlük grubu kullanılabilir olduğunda DeviceAdminReceiver, onSecurityLogsAvailable() geri arama. Günlükleri almak için (sonradan geri arama alındığında) DPC retrieveSecurityLogs() numarasını arar.

DPC'ler güvenliği getirmek için retrievePreRebootSecurityLogs() numarasını da çağırabilir önceki yeniden başlatma döngüsünde oluşturulan günlüklerin sayısı. Bu, iki veya daha fazla son cihaz yeniden başlatma ve önceki yeniden başlatma işlemleri. Desteklenmeyen cihazlar retrieveSecurityLogs(), null değerini döndürür. Uygulamanız, günlükleri hem retrievePreRebootSecurityLogs() ve retrieveSecurityLogs() için şunları yapmanız gerekiyor: yinelenen girişler olup olmadığını kontrol edin.
. Not: Bu özellik yalnızca Cihazdaki kullanıcı veya ilişkili kullanıcılar. Bu özellik şu cihazlarda çalışmaz: çünkü cihaz genelindeki etkinlikleri günlüğe kaydeder.

Bu ayar, şu işlem türleri bulunur:

  • Uygulama yeni başlatıldığında. Bu sayede sizinle ilgili bir sorun olup olmadığını güvenliği ihlal edilmiş uygulamayla başlayan kötü amaçlı yazılımlardır.
  • Bir cihazda başarısız kilit açma denemeleri. Bu şekilde proje zaman çizelgesinde kısa süre içinde çok sayıda başarısız kilit açma denemesi yapıldı.
  • Bir kullanıcı bağlandığında zararlı olabilecek adb komutları cihazı bir bilgisayara USB kablosuyla bağlayabilirsiniz.

Günlüklerin nasıl okunacağıyla ilgili ayrıntılar için SecurityLog sayfasına göz atın.

Geliştirme aşamasında ve test aşamasında sistemi, istediğiniz DPC'nizin kullanabildiği mevcut güvenlik günlüklerini içerir ve grubudur. Android 9.0 (API düzeyi 28) veya sonraki sürümlerde aşağıdaki komutu çalıştırın Android Debug Bridge (adb) komutunu terminalinize ekleyin:

adb shell dpm force-security-logs

Sistem, aracı kullanabileceğiniz sıklığı sınırlandırır ve terminal çıkışında kasıtlı olarak yavaşlatılması gerekir. Kullanılabilir günlükler varsa DPC, onSecurityLogsAvailable() geri çağırmasını alır.

Uzaktan hata raporu isteğinde bulunma

Cihaz sahibi modunda çalışan bir DPC, kullanıcı için uzaktan hata raporları isteyebilir Yalnızca bir kullanıcısı veya ilişkili kullanıcıları olan cihazlar. Hata raporu cihaz etkinliğine tam olarak hata raporu istenildiği anda izin verilir, ancak logcat'in ne sıklıkla geçtiğine bağlı olarak son birkaç saatteki etkinlikleri dahil etmek yenilemesi gerekir.

DPC, hata raporlarını uzaktan istemek için requestBugreport() komutunu çağırır:

İstemci sertifikasına erişim verme ve sertifika erişimini kaldırma

Profil sahibi veya cihaz sahibi modunda çalışan bir DPC, üçüncü taraf uygulamasına izin verirse sertifika yönetme izni olmadan, uygulama kendisine sertifikanın kullanıcı müdahalesi olmadan yüklendiğini gösterir. Bir profildeki tüm uygulamaların erişebileceği bir sertifika almak istiyorsanız installKeyPair() kullanın.

Yapılandırılacak parametreler için installKeyPair() bölümüne bakın. Bu özellik mevcut API ile birlikte çalışır.

Dağıtım senaryosu

installKeyPair() yöntemi kullanılmadığında:

  • Kullanıcıların her seferinde sertifikanın adına ve ardından İzin ver'e dokunması gerekir. bir sertifika için erişim izni vermek istiyorlar.
  • Kullanıcılar bir sertifikayı yüklerken bir istem görür ve sertifikası.

installKeyPair() yöntemiyle:

  • Kullanıcıların bir cihaza erişim izni vermek istediklerinde İzin ver'e dokunmaları gerekmez sertifikası.
  • Kullanıcılar sertifikaları yeniden adlandıramaz.
  • Yöneticiler, veya uygulamalara izin verilmez.

İstemci sertifikasını kaldırma

İstemci sertifikasına erişim izni verildikten sonra istemciyi uzaktan kaldırmak için installKeyPair() aracılığıyla yüklenen sertifikalar, çağrı removeKeyPair().

Cihaz sahibi veya profil sahibi modunda çalışan ya da yetki verilmiş bir DPC sertifika yükleyici removeKeyPair() numarasını çağırabilir. Bu, belirtilen özel anahtar takma adı altında yüklenen sertifika ve özel anahtar çiftidir.

Dağıtım senaryosu

Kuruluş, daha güvenli bir istemci biçimine geçiş yapıyorsa bu özelliği kullanın. sertifikası. Bir yönetici yeni bir sertifikayı kullanıma sunar ve bu sertifikanın dağıtımı zaman alırsa yönetici, desteği sonlandırılan sertifika için devre dışı bırakılır.

Güvenli şifre kodu sıfırlama

DPC'niz bir güvenli jeton. Cihaz sahipleri ve profil sahipleri güvenli arama yapabilir Cihazların ve iş profillerinin şifresini değiştirmek için şifre kodu sıfırlama API'leri tıklayın. Güvenli şifre kodu sıfırlama özelliği, resetPassword() yerine şununla değiştirir: şu iyileştirmeler yapıldı:

DPC derlemeniz Android 8.0'ı (API) hedefliyorsa güvenli şifre kodu sıfırlama özelliğini kullanmanız gerekir. 26. seviye) veya daha üst bir seviyedir. resetPassword() çağrıldığında Android 8.0 veya sonraki sürümleri hedefleyen DPC'lerde SecurityException güncellemeniz gerekir.

Jetonu ayarlayın ve etkinleştirin

DPC'nizin, şifreyi sıfırlamadan önce bir jetonu ayarlaması ve etkinleştirmesi gerekir. Çünkü DPC'niz jetonu hemen kullanamayabilir, jetonu siz ayarlayabilirsiniz kullanıma hazır hale getirmek zorunda kalabilirsiniz.

Şifre sıfırlama jetonu, kriptografik olarak güçlü bir rastgele değerdir ve en az 32 bayt uzunluğunda olmalıdır. Her cihaz ve profil için bir jeton oluşturun; bunu yapmayın oluşturduğunuz jetonları yeniden kullanabilir veya paylaşabilirsiniz.

Jetonları veya şifrelenmiş bir jetonun şifresini çözmek için kullanılacak araçları sunucu. Jetonları kimlik bilgisi ile şifrelenmiş depolama alanında yerel olarak depoluyorsanız DPC'niz Kullanıcı cihazın veya profilin kilidini açana kadar şifreyi sıfırlayamaz. Şu durumda: jetonları yerel olarak cihazla şifrelenmiş depolama alanında depolar ve bu durum güvenlik ihlaline neden olur. saldırganlar bu jetonu bir iş profiline veya birincil bir belirtir.

DPC'nizde yeni bir jeton oluşturabilir veya sunucudan jeton alabilirsiniz. İlgili içeriği oluşturmak için kullanılan aşağıdaki örnekte, kendisi jeton oluşturan ve bunu sunucu:

Kotlin

val token = ByteArray(32)

// Generate a new token
val random = SecureRandom()
random.nextBytes(token)

// Set the token to use at a later date
val success: Boolean
success = dpm.setResetPasswordToken(DeviceAdminReceiver.getComponentName(context), token)

// Activate the token and update success variable...

// Store the token on a server
if (success) {
 sendTokenToServer(token)
}

Java

byte token[] = new byte[32]; // Minimum size token accepted

// Generate a new token
SecureRandom random = new SecureRandom();
random.nextBytes(token);

// Set the token to use at a later date
boolean success;
success = dpm.setResetPasswordToken(DeviceAdminReceiver.getComponentName(getContext()), token);

// Activate the token and update success variable ...

// Store the token on a server
if (success) {
 sendTokenToServer(token);
}

Çoğu durumda, DPC'nizin bir jetonu ayarladıktan sonra etkinleştirmesi gerekir. Ancak, Kullanıcının kilit ekranı şifresi yoksa sistem bir jetonu etkinleştirir hemen. Jetonu etkinleştirmek için kullanıcıdan kimlik bilgilerini onaylamasını isteyin. DPC'niz KeyguardManager yöntemini çağırabilir Başlayan Intent kazanmak için createConfirmDeviceCredentialIntent() onayı. Kullanıcı arayüzünde, cihaz kullanıcısına bunu neden yaptığınızı açıklayın. kimlik doğrulaması yapmasını isteyin. Aşağıdaki snippet, bir reklamı nasıl etkinleştirebileceğinizi ve inceleyebilirsiniz:

Kotlin

// In your DPC, you'll need to localize the user prompt
val ACTIVATE_TOKEN_PROMPT = "Use your credentials to enable remote password reset"
val ACTIVATE_TOKEN_REQUEST = 1

// Create or fetch a token and set it in setResetPasswordToken() ...
val keyguardManager = context.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
val confirmIntent = keyguardManager.createConfirmDeviceCredentialIntent(null, ACTIVATE_TOKEN_PROMPT)

if (confirmIntent != null) {
 startActivityForResult(confirmIntent, ACTIVATE_TOKEN_REQUEST)
 // Check your onActivityResult() callback for RESULT_OK
} else {
 // Null means the user doesn't have a lock screen so the token is already active.
 // Call isResetPasswordTokenActive() if you need to confirm
}

Java

// In your DPC, you'll need to localize the user prompt
static final String ACTIVATE_TOKEN_PROMPT =
 "Use your credentials to enable remote password reset";
static final int ACTIVATE_TOKEN_REQUEST = 1;

// Create or fetch a token and set it in setResetPasswordToken() ...

KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
Intent confirmIntent = keyguardManager.createConfirmDeviceCredentialIntent(
  null, ACTIVATE_TOKEN_PROMPT);

if (confirmIntent != null) {
 startActivityForResult(confirmIntent, ACTIVATE_TOKEN_REQUEST);
 // Check your onActivityResult() callback for RESULT_OK
} else {
 // Null means the user doesn't have a lock screen so the token is already active.
 // Call isResetPasswordTokenActive() if you need to confirm
}

Cihaz yeniden başlatılmadan önce DPC'nizin ayarladığı bir jetonu etkinleştirmeniz gerekir. Android etkinleştirilmemiş bir jetonu bellekte saklar ve tekrar başlat. Kullanıcı, jetonu etkinleştirmeden önce cihazı yeniden başlatırsa DPC'niz aynı jetonu tekrar ayarlayın veya yeni bir jeton oluşturun.

DPC'niz, şu kodu çağırarak bir jetonun etkin olduğunu onaylayabilir: isResetPasswordTokenActive() ve sonucun kontrol edilmesi true.

DPC'niz bir jetonu ayarlayıp etkinleştirdikten sonra bu jeton, DPC'niz tarafından silin veya jetonun yerini alır (veya cihaz fabrika ayarlarına sıfırlanır). Jeton şunlardan bağımsızdır: Şifrenin şifresinin değiştirilmesinden veya silinmesinden etkilenmez.

Jetonu silin

DPC'nizin etkinleştirdiği bir jetonu silmek için clearResetPasswordToken() daha önce ayarlanır. Güvenliği ihlal edilmiş bir jetonu iptal etmeniz gerekebilir veya şifre sıfırlama olanağını kaldırmanız gerekir. Aşağıdaki örnekte, bunu DPC'nizde belirtin:

Kotlin

val dpm = getDpm()
val admin = DeviceAdminReceiver.getComponentName(requireActivity())

// Clear the token
if (!dpm.clearResetPasswordToken(admin)) {
 // Report the failure and possibly try later ...
}

Java

DevicePolicyManager dpm = getDpm();
ComponentName admin = DeviceAdminReceiver.getComponentName(getActivity());

// Clear the token
if (!dpm.clearResetPasswordToken(admin)) {
 // Report the failure and possibly try later ...
}

Şifreyi sıfırlayın

Bir BT yöneticisinin şifreyi sıfırlaması gerektiğinde şu numarayı arayın: resetPasswordWithToken() ve DPC'nizin ayarlayıp etkinleştirdiği jetonu iletin. şunlara dikkat edin:

Kotlin

val token: ByteArray = getTokenFromServer()
val newPassword = "password"

try {
 val result: Boolean = dpm.resetPasswordWithToken(
 DeviceAdminReceiver.getComponentName(requireContext()),
 newPassword,
 token,
 0
 )

 if (result) {
 // The password is now 'password'
 } else {
 // Using 'password' doesn't meet password restrictions
 }
} catch (e: IllegalStateException) {
 // The token doesn't match the one set earlier.
}

Java

byte token[] = getTokenFromServer();
String newPassword = "password";

try {
 boolean result = dpm.resetPasswordWithToken(
  DeviceAdminReceiver.getComponentName(getContext()), newPassword, token, 0);

 if (result) {
 // The password is now 'password'
 } else {
 // Using `password` doesn't meet password restrictions
 }
} catch (IllegalStateException e) {
 // The token doesn't match the one set earlier.
}

resetPasswordWithToken() için yapılan bir çağrı false döndürüyor ancak şifre gelmiyor yeni şifre aşağıdaki kısıtlamaları karşılamadığında değiştirilebilir:

  • Karakter sayısı, minimum şifre uzunluğu sınırlamalarına uygundur. Telefonla arama getPasswordMinimumLength() yönetici bir uzunluk kısıtlaması ayarladı.
  • Şifredeki karakterlerin aralığı ve karmaşıklığı bir besteye uygun kısıtlayın. BT uzmanı olup olmadığını öğrenmek için getPasswordQuality() numaralı telefonu arayın yönetici bir beste kısıtlaması ayarladı.

Şifre kalitesi kısıtlamaları için bir şifre ayarlanması gerekmiyorsa kaldırmak için resetPasswordWithToken() öğesine null veya boş bir dize iletin şifre.

İş profili güvenlik sorgulaması

Profil sahibi modunda çalışan bir DPC, kullanıcıların güvenlik belirtmesini gerektirebilir iş profilinde çalışan uygulamalar için sorgulama görevi. Sistem, güvenlik açıklarını gösteriyor Kullanıcı herhangi bir iş uygulamasını açmaya çalıştığında giriş sorgulaması. Kullanıcı başarıyla Kullanıcı güvenlik sorgulamasını tamamladığında, sistem iş profilinin kilidini açar ve şifresini çözer.

İş profili güvenlik sorgulamasının işleyiş şekli

  1. DPC bir ACTION_SET_NEW_PASSWORD niyeti gönderirse sistem istem gönderir. kullanıcının güvenlik sorgulaması ayarlamasına izin verin.
  2. DPC da bir ACTION_SET_NEW_PARENT_PROFILE_PASSWORD kullanıcıdan cihaz kilidi ayarlamasını isteme.

Bir DPC, iş sorgulaması için şifre politikalarını politikaları. Örneğin, cihaz sorgulaması yanıtı, diğer şifreler. DPC, meydan okuma politikalarını her zamanki setPasswordQuality() ve gibi DevicePolicyManager yöntemleri setPasswordMinimumLength().

Dikkat edilmesi gereken noktalar

  • DPC iş profilindeki şifreyi sıfırlayabilir ancak cihaz (kişisel) şifresi. Kullanıcı iş ve kişisel şifre ayarlamayı seçerse aynı ise iş profilindeki resetPassword() Şifreniz yalnızca iş profilinde sıfırlanacak ve şifre aynı olmayacaktır için 100'den az olmalıdır.
  • Bir DPC, şunları kullanarak kimlik bilgileri ekranını iş görevi için özelleştirebilir: setOrganizationColor() ve setOrganizationName().
  • Cihaz yöneticileri, şifreleri temizlemek veya değiştirmek için resetPassword() uygulamasını kullanamaz ve önceden ayarlanmışlardır. Cihaz yöneticileri yine şifre belirleyebilir, ancak Şifre, PIN veya desen olmadığında.

Daha fazla bilgi için getParentProfileInstance() sayfasını ziyaret edin ve verilen bilgileri inceleyin. DevicePolicyManager altındaki dokümanlara göz atın.