Fitur dalam panduan ini menjelaskan kemampuan pengelolaan keamanan yang dapat Anda terapkan di aplikasi pengontrol kebijakan perangkat (DPC). Dokumen ini berisi contoh kode dan Anda juga dapat menggunakan aplikasi Test DPC sebagai sumber kode contoh untuk fitur perusahaan Android.
Aplikasi DPC dapat berjalan dalam mode pemilik profil di perangkat pribadi atau di pemilik perangkat pada perangkat terkelola sepenuhnya. Tabel ini menunjukkan fitur mana yang tersedia jika DPC berjalan dalam mode pemilik profil atau mode pemilik perangkat:
Nonaktifkan akses ke aplikasi
Untuk organisasi yang ingin memblokir karyawan agar tidak bermain game atau menonton YouTube di perangkat yang didukung Android selama waktu-waktu tertentu, atau di hari-hari tertentu, DPC dapat menonaktifkan akses ke aplikasi untuk sementara.
Untuk menonaktifkan akses ke aplikasi, DPC yang berjalan di mode pemilik perangkat atau pemilik profil
mengonfigurasi setPackagesSuspended()
, lalu aplikasi yang dipilih bertindak seolah-olah
dinonaktifkan (peluncur Google membuat aplikasi berwarna abu-abu). Saat pengguna
mengetuk aplikasi,
mereka melihat dialog sistem
yang mengatakan bahwa aplikasi ditangguhkan.
Saat ditangguhkan, aplikasi tidak dapat memulai aktivitas dan notifikasi ke disembunyikan. Paket yang ditangguhkan tidak muncul dalam ringkasan layar, aplikasi tidak dapat menampilkan dialog (termasuk toast dan snackbar), dan tidak dapat memutar audio atau menggetarkan perangkat.
Peluncur dapat mengetahui apakah aplikasi ditangguhkan dengan memanggil
Metode isPackageSuspended()
. Untuk mengetahui detail tentang cara mengonfigurasi aplikasi
penangguhan, lihat setPackagesSuspended
.
Memblokir aplikasi dari sumber tidak dikenal
Aplikasi yang tidak diinstal dari Google Play (atau app store tepercaya lainnya) yang disebut aplikasi dari sumber tidak dikenal. Perangkat dan data dapat berisiko lebih tinggi saat orang menginstal aplikasi tersebut.
Untuk mencegah seseorang menginstal aplikasi dari sumber tidak dikenal, admin komponen
perangkat terkelola sepenuhnya dan profil kerja dapat menambahkan
Batasan pengguna DISALLOW_INSTALL_UNKNOWN_SOURCES
.
Pembatasan di seluruh perangkat profil kerja
Saat admin profil kerja menambahkan DISALLOW_INSTALL_UNKNOWN_SOURCES
,
pembatasan hanya berlaku untuk profil kerja. Namun, admin kantor
dapat menerapkan pembatasan di seluruh perangkat dengan menyetel
konfigurasi terkelola untuk Google Play. Batasan di seluruh perangkat
tersedia di Android 8.0 (atau yang lebih tinggi) jika aplikasi Google Play yang terinstal
versi 80812500 atau yang lebih tinggi.
Untuk membatasi penginstalan aplikasi ke Google Play, ikuti langkah-langkah berikut:
- Menetapkan paket konfigurasi terkelola untuk paket Google Play
com.android.vending
. - Dalam paket, masukkan nilai boolean untuk
Tombol
verify_apps:device_wide_unknown_source_block
. - Tambahkan batasan pengguna
ENSURE_VERIFY_APPS
.
Contoh berikut menunjukkan cara memeriksa apakah Google Play mendukung tindakan ini
dan tetapkan nilai ke true
:
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);
Antarmuka pengguna dalam setelan sistem tetap aktif, tetapi sistem memblokir penginstalan aplikasi. Pembatasan ini memengaruhi penginstalan di masa mendatang—sebelumnya aplikasi terinstal tetap berada di perangkat. Pengguna perangkat dapat terus menginstal aplikasi ke profil pribadi menggunakan Android Debug Bridge (adb).
Untuk mempelajari sumber tidak dikenal lebih lanjut, baca Distribusi alternatif lainnya.
Membatasi akun di Google Play
Terkadang, organisasi mungkin ingin mengizinkan orang untuk menambahkan Google Akun (misalnya, untuk membaca email di Gmail) tetapi tidak menginginkan untuk menginstal aplikasi. DPC dapat menetapkan daftar akun yang dapat digunakan orang di Google Play.
Komponen admin pada perangkat yang terkelola sepenuhnya atau profil kerja dapat membatasi akun dengan menyetel konfigurasi terkelola untuk Google Play. Akun pembatasan tersedia saat aplikasi Google Play yang terinstal adalah versi 80970100 atau yang lebih tinggi.
Untuk membatasi akun di Google Play, lakukan hal berikut:
- Menetapkan paket konfigurasi terkelola untuk paket Google Play
com.android.vending
. - Dalam paket, masukkan alamat email yang dipisahkan koma sebagai nilai string untuk
tombol
allowed_accounts
.
Contoh berikut menunjukkan cara membatasi akun:
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);
Untuk membatasi Google Play hanya untuk akun kerja, setel allowed_accounts
ke
satu akun terkelola segera setelah DPC mengetahui alamat email akun tersebut. Channel
string kosong mencegah orang menggunakan akun apa pun di Google Play.
Mengaktifkan perlindungan reset ke setelan pabrik untuk perusahaan
Dengan menggunakan perlindungan reset ke setelan pabrik perusahaan, organisasi dapat menentukan Akun Google dapat menyediakan perangkat yang telah direset ke setelan pabrik.
Perlindungan reset ke setelan pabrik konsumen dirancang untuk mencegah pencurian perangkat. Sebelum pembaruan yang memungkinkan siapa pun menyediakan perangkat setelah pengaturan pabrik yang tidak sah (seperti seperti menggunakan EMM), wizard penyiapan mengharuskan pengguna untuk melakukan autentikasi terhadap Akun Google yang sebelumnya ada di profil pribadi perangkat.
Dalam lingkungan perusahaan, {i>factory reset<i} adalah alat penting untuk mengelola perangkat karyawan ketika ada karyawan yang keluar dari organisasi. Namun, jika organisasi tidak mengetahui kredensial akun karyawan, melakukan {i>factory reset<i} perlindungan data dapat memblokir kemampuan organisasi untuk menerbitkan perangkat ke pihak lain karyawan.
Mengontrol penyediaan setelah reset ke setelan pabrik
Saat berjalan di mode pemilik perangkat, DPC Anda dapat menggunakan
setFactoryResetProtectionPolicy()
untuk mengontrol akun
diizinkan untuk menyediakan perangkat
setelah pengaturan ulang pabrik. Jika konfigurasi ini
ditetapkan ke null
atau ditetapkan ke daftar kosong, akun yang diizinkan untuk disediakan
perangkat setelah pengaturan ulang pabrik
adalah akun di profil pribadi
perangkat seluler.
DPC dapat mengonfigurasi akun ini sepanjang waktu perangkat seluler.
- Admin IT dapat menggunakan metode
people.get
dari People API dengan nilai khususme
. Tindakan ini akan mengambiluserId
untuk akun yang digunakan untuk login.userID
ditampilkan di kunciresourceName
di bentukpeople/[userId]
sebagai string bilangan bulat. Akun yang baru dibuat mungkin tidak tersedia untuk tujuan reset ke setelan pabrik selama 72 jam. - Anda juga dapat mengaktifkan satu atau beberapa admin IT untuk membuka kunci perangkat setelah
melakukan {i>factory reset<i}. Minta masing-masing admin IT untuk login ke Akun Google mereka dan
ikuti juga langkah 1 dan berbagi
userId
dengan Anda, sehingga Anda dapat menambahkanuserIds
ke Daftar di langkah berikutnya. - DPC menetapkan pembatasan aplikasi yang sesuai menggunakan
setFactoryResetProtectionPolicy()
untuk menetapkan DaftaruserId
yang dapat menyediakan perangkat {i> factory reset<i}. - DPC mengaktifkan akun yang dapat menyediakan perangkat setelah pabrik
reset dengan mengirimkan siaran
com.google.android.gms.auth.FRP_CONFIG_CHANGED
sebagai intent eksplisit untuk tidak dapat dihentikan karena adanya pembatasan di latar belakang.
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);
Lama
Untuk perangkat yang tidak dapat menggunakan setFactoryResetProtectionPolicy()
, disediakan dengan
Level API 30, DPC Anda dapat menggunakan setApplicationRestrictions
untuk menambahkan
akun yang dipilih ke konfigurasi terkelola factoryResetProtectionAdmin
untuk paket com.google.android.gms
.
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);
Menonaktifkan perlindungan reset ke setelan pabrik perusahaan
Untuk menonaktifkan perlindungan {i>factory reset<i}, DPC Anda dapat menggunakan
setFactoryResetProtectionPolicy()
meneruskan nilai null
.
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);
Lama
Untuk perangkat yang tidak dapat menggunakan setFactoryResetProtectionPolicy()
, disediakan dengan
API Level 30, DPC Anda dapat menggunakan setApplicationRestrictions
untuk menetapkan kunci
nilai true
di disableFactoryResetProtectionAdmin
terkelola
untuk paket com.google.android.gms
.
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);
Memantau log proses perusahaan dan laporan bug jarak jauh
Di konsol EMM, admin dapat memantau perangkat terkelola sepenuhnya menggunakan log proses dan laporan {i> bug <i}jarak jauh.
Mencatat aktivitas perangkat perusahaan
DPC yang berjalan dalam mode pemilik perangkat dapat mengidentifikasi aktivitas mencurigakan dengan cara jarak jauh melacak aktivitas perangkat, termasuk peluncuran aplikasi, Android Debug Bridge (adb) aktivitas, dan pembukaan kunci layar. Log proses tidak memerlukan izin pengguna.
Untuk mengaktifkan atau menonaktifkan logging, DPC memanggil setSecurityLoggingEnabled()
.
Saat batch log baru tersedia, DeviceAdminReceiver
akan menerima
Callback onSecurityLogsAvailable()
. Untuk mengambil log (setelah
menerima callback), DPC memanggil retrieveSecurityLogs()
.
DPC juga dapat memanggil retrievePreRebootSecurityLogs()
untuk mengambil keamanan
log yang dibuat dalam siklus mulai ulang sebelumnya. Ini adalah interval antara
{i>reboot<i} perangkat terakhir dan {i>reboot <i}sebelumnya. Perangkat yang tidak mendukung
retrieveSecurityLogs()
menampilkan null
. Jika aplikasi Anda mengambil log menggunakan
retrievePreRebootSecurityLogs()
dan retrieveSecurityLogs()
, Anda harus
periksa entri duplikat.
Catatan: Fitur ini hanya mencatat aktivitas pada perangkat terkelola sepenuhnya dengan satu
pengguna atau pengguna terafiliasi di perangkat. Fitur ini tidak berfungsi di
perangkat pribadi, karena mencatat aktivitas di seluruh perangkat.
Setelan ini dapat berguna dalam audit pasca-peristiwa keamanan karena mencatat jenis tindakan berikut:
- Setiap kali aplikasi baru dimulai. Langkah ini dapat membantu mengidentifikasi apakah ada {i>malware <i}yang dimulai dengan aplikasi yang telah disusupi.
- Upaya membuka kunci di perangkat tidak berhasil. Hal ini dapat mengidentifikasi apakah ada beberapa kali upaya pembukaan kunci yang gagal dalam waktu singkat.
- Perintah adb yang berpotensi berbahaya saat pengguna terhubung perangkat ke komputer menggunakan kabel USB.
Untuk mengetahui detail tentang cara membaca log, lihat SecurityLog
.
Selagi Anda mengembangkan dan menguji, Anda dapat memaksa sistem untuk membuat log keamanan yang ada untuk DPC—Anda tidak perlu menunggu batch. Di Android 9.0 (API level 28) atau yang lebih baru, jalankan perintah berikut Perintah Android Debug Bridge (adb) di terminal Anda:
adb shell dpm force-security-logs
Sistem membatasi seberapa sering Anda dapat menggunakan alat ini dan melaporkan setiap
{i>output <i}yang sengaja dibuat menjadi lambat. Jika ada log yang tersedia,
DPC menerima callback onSecurityLogsAvailable()
.
Meminta laporan bug dari jarak jauh
DPC yang berjalan dalam mode pemilik perangkat dapat meminta laporan bug dari jarak jauh untuk pengguna perangkat dengan hanya satu pengguna atau pengguna terafiliasi. Laporan {i>bug<i} menangkap aktivitas perangkat tepat pada saat laporan bug diminta, tetapi juga termasuk aktivitas dari beberapa jam sebelumnya, tergantung pada seberapa sering dimuat ulang.
Untuk meminta laporan bug dari jarak jauh, DPC memanggil requestBugreport()
:
- Jika pengguna setuju untuk membagikan laporan bug, DPC akan menerima bug tersebut
laporkan menggunakan
onBugreportShared()
- Jika pengguna menolak membagikan laporan bug, DPC akan menerima informasi
minta pesan ditolak menggunakan
onBugreportSharingDeclined()
- Jika laporan bug gagal, DPC akan melihat
onBugreportFailed()
denganBUGREPORT_FAILURE_FAILED_COMPLETING
atauBUGREPORT_FAILURE_FILE_NO_LONGER_AVAILABLE
.
Memberikan akses dan menghapus akses ke sertifikat klien
Jika DPC yang berjalan di mode pemilik profil atau pemilik perangkat memberikan aplikasi pihak ketiga
kemampuan untuk mengelola sertifikat, aplikasi
dapat memberi dirinya sendiri akses ke
sertifikat yang diinstalnya
tanpa intervensi dari pengguna. Untuk menginstal
sertifikat yang dapat diakses oleh semua aplikasi dalam profil, gunakan installKeyPair()
.
Untuk parameter mana yang akan dikonfigurasi, lihat installKeyPair()
. Fitur ini
berfungsi dengan API yang sudah ada untuk mengelola sertifikat.
Skenario deployment
Tanpa metode installKeyPair()
:
- Pengguna harus mengetuk nama sertifikat dan mengetuk Izinkan setiap kali mereka ingin memberikan akses ke sertifikat.
- Pengguna akan melihat perintah saat menginstal sertifikat dan harus memberi nama CA {i>root<i}.
Dengan metode installKeyPair()
:
- Pengguna tidak perlu mengetuk Izinkan setiap kali mereka ingin memberikan akses ke CA {i>root<i}.
- Pengguna tidak dapat mengganti nama sertifikat.
- Admin memiliki kontrol lebih besar karena mereka dapat memblokir sertifikat untuk aplikasi yang seharusnya tidak memiliki akses ke sertifikat tertentu.
Menghapus sertifikat klien
Setelah memberikan akses ke sertifikat klien, untuk menghapus klien dari jarak jauh
sertifikat diinstal melalui installKeyPair()
, panggil
removeKeyPair()
.
DPC yang berjalan dalam mode pemilik perangkat atau mode pemilik profil, atau didelegasikan
penginstal sertifikat dapat memanggil removeKeyPair()
. Tindakan ini menghapus
sertifikat dan pasangan kunci pribadi yang
diinstal di bawah alias kunci pribadi tertentu.
Skenario deployment
Gunakan fitur ini jika organisasi bermigrasi ke bentuk klien yang lebih aman CA {i>root<i}. Jika admin meluncurkan sertifikat baru, dan distribusinya membutuhkan banyak waktu, admin dapat mencabut akses sertifikat setelah migrasi selesai.
Kode sandi aman direset
DPC Anda dapat menyetel ulang sandi pengguna dengan mengizinkan perubahan menggunakan
token yang aman yang telah didaftarkan sebelumnya. Pemilik perangkat dan pemilik profil dapat menghubungi Secure
API reset kode sandi untuk mengubah sandi perangkat dan profil kerja
secara berurutan. Reset kode sandi yang aman menggantikan resetPassword()
dengan
peningkatan berikut:
- DPC Anda dapat mereset kode sandi sebelum pengguna membuka kunci perangkat atau profil setelah memulai ulang pada perangkat yang menggunakan enkripsi berbasis file.
- Android Keystore menyimpan kunci yang diautentikasi pengguna setelah kode sandi direset.
Anda harus menggunakan reset kode sandi aman jika build DPC menargetkan Android 8.0 (API
level 26) atau lebih tinggi. Memanggil resetPassword()
akan menampilkan
SecurityException
di DPC yang menargetkan Android 8.0 atau yang lebih tinggi sehingga Anda mungkin
harus memperbarui DPC.
Menetapkan dan mengaktifkan token
DPC harus menetapkan dan mengaktifkan token sebelum mereset sandi. Karena DPC Anda mungkin tidak dapat langsung menggunakan token, Anda menetapkan sebelum administrator IT perlu menggunakannya.
Token pengaturan ulang {i>password<i} adalah nilai acak yang kuat secara kriptografis dan harus setidaknya sepanjang 32 byte. Buat token untuk setiap perangkat dan profil. Jangan menggunakan kembali atau membagikan token yang telah Anda buat.
Sebaiknya simpan token, atau cara untuk mendekripsi token terenkripsi, pada server tertentu. Jika Anda menyimpan token secara lokal di penyimpanan yang dienkripsi dengan kredensial, DPC Anda tidak dapat mengatur ulang {i>password<i} hingga pengguna membuka kunci perangkat atau profil. Jika Anda menyimpan token secara lokal di penyimpanan yang dienkripsi perangkat, yang kemudian disusupi, penyerang dapat menggunakan token untuk mendapatkan akses ke profil kerja atau .
Anda dapat membuat token baru di DPC atau mengambil token dari server. Tujuan di bawah ini menunjukkan DPC yang menghasilkan token itu sendiri dan melaporkannya ke server:
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); }
Biasanya, DPC harus mengaktifkan token setelah menyetelnya. Tapi, ketika
pengguna tidak memiliki {i>password<i} layar kunci, sistem akan mengaktifkan token
langsung. Untuk mengaktifkan token, minta pengguna untuk mengonfirmasi kredensialnya.
DPC Anda dapat memanggil metode KeyguardManager
createConfirmDeviceCredentialIntent()
untuk mendapatkan Intent
yang memulai
konfirmasi. Jelaskan kepada pengguna perangkat
di antarmuka pengguna, mengapa Anda
meminta mereka untuk mengotentikasi. Cuplikan di bawah ini menunjukkan cara mengaktifkan
token di DPC:
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 }
Anda harus mengaktifkan token yang ditetapkan DPC sebelum perangkat dimulai ulang. Android menyimpan token yang belum diaktifkan dalam memori dan tidak mempertahankan token setelah memulai ulang. Jika pengguna memulai ulang perangkat sebelum mengaktifkan token, DPC Anda dapat menetapkan token yang sama atau membuat token baru.
DPC Anda dapat mengonfirmasi bahwa token aktif dengan memanggil
isResetPasswordTokenActive()
dan memeriksa hasilnya adalah true
.
Setelah DPC menetapkan dan mengaktifkan token, DPC valid sampai DPC menghapus atau menggantikan token (atau perangkat direset ke setelan pabrik). Token tidak bergantung pada {i>password<i} dan tidak terpengaruh oleh perubahan atau penghapusan {i>password<i} oleh pengguna.
Menghapus token
Anda dapat memanggil clearResetPasswordToken()
untuk menghapus token yang DPC Anda
yang telah ditentukan sebelumnya. Anda mungkin perlu mencabut token
yang telah disusupi atau Anda mungkin ingin
menghapus kemampuan untuk
mengatur ulang {i>password<i}. Contoh di bawah ini menunjukkan cara
hal ini di DPC Anda:
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 ... }
Mereset sandi
Saat admin IT perlu mereset sandi, hubungi
resetPasswordWithToken()
dan meneruskan token yang ditetapkan dan diaktifkan oleh DPC Anda
terlebih dahulu:
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. }
Panggilan ke resetPasswordWithToken()
akan menampilkan false
, dan sandinya tidak
diubah, jika {i>password<i} baru tidak memenuhi batasan berikut:
- Jumlah karakter memenuhi batasan panjang sandi minimum. Telepon
getPasswordMinimumLength()
untuk mengetahui apakah menetapkan batasan panjang. - Rentang dan kerumitan karakter dalam {i>password<i} memenuhi komposisi
batasan data. Hubungi
getPasswordQuality()
untuk mengetahui apakah IT admin menyetel batasan komposisi.
Jika batasan kualitas sandi tidak memerlukan penetapan sandi, Anda dapat
teruskan null
atau string kosong ke resetPasswordWithToken()
untuk menghapus
{i>password<i}.
Pertanyaan keamanan profil kerja
DPC yang berjalan dalam mode pemilik profil dapat mengharuskan pengguna untuk menentukan untuk aplikasi yang berjalan di profil kerja. Sistem menunjukkan tingkat keamanan saat pengguna mencoba membuka aplikasi kerja apa pun. Jika pengguna berhasil menyelesaikan tantangan keamanan, sistem akan membuka profil kerja dan mendekripsinya, jika diperlukan.
Cara kerja tantangan keamanan profil kerja
- Jika DPC mengirim intent
ACTION_SET_NEW_PASSWORD
, sistem akan memberi tahu pengguna untuk menyiapkan pertanyaan keamanan. - DPC juga dapat mengirim
ACTION_SET_NEW_PARENT_PROFILE_PASSWORD
untuk meminta pengguna menyetel penguncian perangkat.
DPC dapat menetapkan kebijakan {i>password<i}
untuk tantangan pekerjaan secara berbeda dari
kebijakan untuk sandi perangkat lainnya. Misalnya, panjang minimum untuk
respons tantangan perangkat bisa berbeda dari
panjang yang dibutuhkan untuk
{i>password<i}. DPC menetapkan kebijakan tantangan menggunakan
Metode DevicePolicyManager
, seperti setPasswordQuality()
dan
setPasswordMinimumLength()
.
Pertimbangan
- DPC dapat mereset sandi di profil kerja, tetapi tidak dapat mereset sandi
{i>password<i} perangkat (pribadi). Jika pengguna memilih untuk menetapkan sandi kerja dan pribadi
sama, maka
resetPassword()
di profil kerja menyebabkan sandi harus direset di profil kerja saja, dan sandinya tidak akan sama sebagai sistem untuk layar kunci perangkat. - DPC dapat menyesuaikan layar kredensial untuk tantangan kerja dengan menggunakan
setOrganizationColor()
dansetOrganizationName()
. - Admin perangkat tidak dapat menggunakan
resetPassword()
untuk menghapus sandi atau mengubah yang sudah ditetapkan. Admin perangkat masih dapat menyetel sandi, tetapi hanya saat perangkat belum memiliki sandi, PIN, atau pola.
Untuk informasi tambahan, lihat getParentProfileInstance()
dan lihat referensi
dokumentasi berdasarkan DevicePolicyManager
.