Pengendalian Akses Keychain
Lindungi item dengan biometrik dan pembukaan kunci perangkat.
Pengendalian Akses Keychain adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.
Mengendalikan Kapan Rahasia Dapat Dibaca
Menyimpan rahasia hanyalah separuh pekerjaan — Anda harus mengendalikan kapan rahasia itu dapat dibaca. Rantai Kunci menyediakan kelas aksesibilitas dan flags kontrol akses yang membatasi entri berdasarkan pembukaan kunci perangkat, kode sandi, atau biometrik. Ini melindungi data jika perangkat hilang.
import Security
// Two layers of control:
// kSecAttrAccessible -> when readable (lock state)
// SecAccessControl -> user presence / biometricsKunci kSecAttrAccessible
kSecAttrAccessible menetapkan kelas aksesibilitas saat penambahan. Kunci ini menentukan apakah entri selalu tersedia, hanya tersedia setelah pembukaan kunci pertama, atau hanya tersedia saat perangkat tidak terkunci. Pilih tingkat paling ketat yang diizinkan oleh fitur Anda.
import Security
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: "user",
kSecValueData as String: Data("secret".utf8),
kSecAttrAccessible as String:
kSecAttrAccessibleWhenUnlocked
]
_ = queryWhenUnlocked
kSecAttrAccessibleWhenUnlocked membuat entri hanya dapat dibaca saat perangkat tidak terkunci. Tugas latar belakang yang berjalan saat perangkat terkunci tidak dapat mengaksesnya. Ini adalah bawaan yang masuk akal untuk sebagian besar kredensial sesi.
import Security
// Readable only while unlocked; blocked when locked.
let level = kSecAttrAccessibleWhenUnlocked
_ = levelAfterFirstUnlock
kSecAttrAccessibleAfterFirstUnlock membuat entri tetap dapat dibaca sejak pembukaan kunci pertama setelah perangkat dinyalakan hingga perangkat dimulai ulang — bahkan saat perangkat kembali terkunci. Gunakan ini untuk rahasia yang diperlukan proses latar belakang, seperti kredensial untuk menangani notifikasi.
import Security
// Available after the first unlock post-boot,
// including while subsequently locked.
let level = kSecAttrAccessibleAfterFirstUnlock
_ = levelVarian ThisDeviceOnly
Setiap kelas aksesibilitas memiliki bentuk ...ThisDeviceOnly. Entri ini tidak disertakan dalam cadangan terenkripsi dan tidak pernah dipindahkan ke perangkat baru. Gunakan bentuk ini untuk kunci yang tidak boleh meninggalkan perangkat keras ini.
import Security
// Never backed up, never migrated:
let local = kSecAttrAccessibleWhenUnlockedThisDeviceOnly
_ = localSaat Kode Sandi Ditetapkan
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly hanya menyimpan entri jika pengguna memiliki kode sandi, dan menghapusnya jika kode sandi tersebut dihapus. Ini menjamin rahasia selalu dilindungi oleh kode sandi.
import Security
let level =
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
// Item vanishes if the user disables their passcode.
_ = levelSecAccessControl untuk Kehadiran Pengguna
Selain status kunci, SecAccessControlCreateWithFlags membuat kebijakan yang mengharuskan autentikasi pengguna secara aktif — biometrik atau kode sandi — saat pembacaan. Anda memasangnya melalui kSecAttrAccessControl, sebagai pengganti atau bersama kunci aksesibilitas.
import Security
func makeControl() -> SecAccessControl? {
return SecAccessControlCreateWithFlags(
nil,
kSecAttrAccessibleWhenUnlockedThisDeviceOnly,
.userPresence,
nil)
}Flags Kontrol Akses
Flags memperjelas persyaratan: .userPresence mengizinkan biometrik atau fallback kode sandi; .biometryCurrentSet menjadikan entri tidak valid jika sidik jari atau wajah yang terdaftar berubah; .devicePasscode memaksa pengguna memasukkan kode sandi. Gabungkan flags tersebut untuk menyatakan kebutuhan keamanan Anda.
import Security
// .userPresence -> biometric OR passcode
// .biometryAny -> any enrolled biometric
// .biometryCurrentSet -> invalidate on biometric change
// .devicePasscode -> passcode only
let flags: SecAccessControlCreateFlags = [.userPresence]
_ = flagsMenambahkan Entri yang Dilindungi
Untuk menyimpan rahasia yang dibatasi oleh biometrik, letakkan objek SecAccessControl di bawah kSecAttrAccessControl. Setiap pembacaan berikutnya akan meminta pengguna melakukan autentikasi sebelum data dikembalikan.
import Security
func saveProtected(_ data: Data, account: String,
control: SecAccessControl) -> Bool {
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: account,
kSecValueData as String: data,
kSecAttrAccessControl as String: control]
return SecItemAdd(query as CFDictionary, nil)
== errSecSuccess
}Pembacaan Meminta Pengguna
Membaca entri yang dilindungi secara otomatis memicu antarmuka autentikasi. Anda dapat memberikan string alasan melalui kSecUseOperationPrompt agar permintaan tersebut menjelaskan alasan akses diperlukan. Operasi pembacaan tertahan hingga pengguna melakukan autentikasi atau membatalkannya.
import Security
func readProtected(account: String) -> Data? {
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: account,
kSecReturnData as String: true,
kSecUseOperationPrompt as String:
String(localized: "Unlock your saved key")]
var out: CFTypeRef?
return SecItemCopyMatching(query as CFDictionary,
&out) == errSecSuccess ? out as? Data : nil
}Memilih Tingkat yang Tepat
Sesuaikan kebijakan dengan risikonya:
- Kredensial sesi yang digunakan di latar belakang:
AfterFirstUnlock. - Kredensial yang hanya digunakan antarmuka pengguna:
WhenUnlocked. - Rahasia bernilai tinggi:
SecAccessControldengan.userPresencedan kelasThisDeviceOnly.
Tingkat yang lebih ketat lebih aman, tetapi menghalangi akses latar belakang — seimbangkan keduanya.
import Security
// High-value: biometric-gated, device-bound, no backup
let control = SecAccessControlCreateWithFlags(
nil,
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
.userPresence, nil)
_ = controlPemeriksaan Singkat
Ingat kembali kelas aksesibilitas yang sesuai untuk rahasia yang diperlukan di latar belakang.
Rangkuman
Anda mempelajari cara membatasi akses ke entri Rantai Kunci:
kSecAttrAccessiblemenetapkan ketersediaan berdasarkan status kunci:WhenUnlocked,AfterFirstUnlock, dan varian...ThisDeviceOnlyyang melewati pencadangan.WhenPasscodeSetThisDeviceOnlymengaitkan entri dengan keberadaan kode sandi.SecAccessControldengan flags seperti.userPresenceatau.biometryCurrentSetmengharuskan autentikasi saat pembacaan.- Pilih tingkat paling ketat yang tetap mengizinkan pola akses Anda.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pengendalian Akses Keychain” gratis?
Ya — teks lengkap “Pengendalian Akses Keychain” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pengendalian Akses Keychain”?
Lindungi item dengan biometrik dan pembukaan kunci perangkat. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Swift Academy?
Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Pengendalian Akses Keychain” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Menyimpan Rahasia di Keychain
- Pengendalian Akses Keychain
- Autentikasi Biometrik
- Perlindungan Data dan Enkripsi