Adgangskontrol til Keychain
Beskyt elementer med biometri og oplåsning af enheden.
Adgangskontrol til Keychain er en gratis Swift Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Swift Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Swift Academy-kurset indeholder 4 lektioner i alt.
Styring af, hvornår hemmeligheder kan læses
At gemme en hemmelighed er kun halvdelen af opgaven — du skal styre hvornår den kan læses. Keychain tilbyder tilgængelighedsklasser og flag til adgangskontrol, der begrænser adgangen til elementer ud fra oplåsning af enheden, adgangskode eller biometrisk godkendelse. Det beskytter data, hvis en enhed bliver væk.
import Security
// Two layers of control:
// kSecAttrAccessible -> when readable (lock state)
// SecAccessControl -> user presence / biometricsNøglen kSecAttrAccessible
kSecAttrAccessible angiver tilgængelighedsklassen ved tilføjelse. Den bestemmer, om et element altid er tilgængeligt, kun efter den første oplåsning eller kun, mens enheden er låst op. Vælg det strengeste niveau, som din funktion tillader.
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 gør elementet læsbart, men kun mens enheden er låst op. Baggrundsopgaver, der kører, mens enheden er låst, kan ikke få adgang til det. Det er standardvalget for de fleste sessionstokens.
import Security
// Readable only while unlocked; blocked when locked.
let level = kSecAttrAccessibleWhenUnlocked
_ = levelAfterFirstUnlock
kSecAttrAccessibleAfterFirstUnlock holder elementet læsbart fra den første oplåsning efter opstart og indtil næste genstart — også mens enheden senere er låst. Brug det til hemmeligheder, som en baggrundsproces har brug for, f.eks. et token til håndtering af push-meddelelser.
import Security
// Available after the first unlock post-boot,
// including while subsequently locked.
let level = kSecAttrAccessibleAfterFirstUnlock
_ = levelVarianter af ThisDeviceOnly
Hver tilgængelighedsklasse har en ...ThisDeviceOnly-variant. Disse elementer udelukkes fra krypterede sikkerhedskopier og overføres aldrig til en ny enhed. Brug dem til nøgler, der aldrig må forlade denne hardware.
import Security
// Never backed up, never migrated:
let local = kSecAttrAccessibleWhenUnlockedThisDeviceOnly
_ = localNår der er angivet en adgangskode
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly gemmer kun elementet, hvis brugeren har en adgangskode, og sletter det, hvis adgangskoden fjernes. Det garanterer, at hemmeligheden altid er beskyttet af en adgangskode.
import Security
let level =
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
// Item vanishes if the user disables their passcode.
_ = levelSecAccessControl til brugerens tilstedeværelse
Ud over låsetilstanden opbygger SecAccessControlCreateWithFlags en politik, der kræver aktiv brugergodkendelse — biometrisk godkendelse eller adgangskode — på læsetidspunktet. Du knytter den til via kSecAttrAccessControl i stedet for eller sammen med tilgængelighedsnøglen.
import Security
func makeControl() -> SecAccessControl? {
return SecAccessControlCreateWithFlags(
nil,
kSecAttrAccessibleWhenUnlockedThisDeviceOnly,
.userPresence,
nil)
}Flag til adgangskontrol
Flagene finjusterer kravet: .userPresence tillader biometrisk godkendelse eller adgangskode som alternativ; .biometryCurrentSet gør elementet ugyldigt, hvis registrerede fingeraftryk eller ansigter ændres; .devicePasscode kræver indtastning af adgangskoden. Kombinér dem for at udtrykke dine sikkerhedsbehov.
import Security
// .userPresence -> biometric OR passcode
// .biometryAny -> any enrolled biometric
// .biometryCurrentSet -> invalidate on biometric change
// .devicePasscode -> passcode only
let flags: SecAccessControlCreateFlags = [.userPresence]
_ = flagsTilføjelse af et beskyttet element
Hvis du vil gemme en hemmelighed, der er beskyttet af biometrisk godkendelse, skal du placere objektet SecAccessControl under kSecAttrAccessControl. Enhver senere læsning beder brugeren om at godkende sig, før dataene returneres.
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
}Læsning beder brugeren om godkendelse
Læsning af et beskyttet element udløser automatisk brugergrænsefladen til godkendelse. Du kan angive en begrundelsesstreng via kSecUseOperationPrompt, så dialogen forklarer, hvorfor adgangen er nødvendig. Læsningen blokerer, indtil brugeren godkender sig eller annullerer.
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
}Valg af det rette niveau
Tilpas politikken til risikoen:
- Sessionstoken, der bruges i baggrunden:
AfterFirstUnlock. - Token, der kun bruges i brugergrænsefladen:
WhenUnlocked. - Hemmelighed med høj værdi:
SecAccessControlmed.userPresenceog enThisDeviceOnly-klasse.
Et strengere niveau er sikrere, men forhindrer baggrundsadgang — afvej begge hensyn.
import Security
// High-value: biometric-gated, device-bound, no backup
let control = SecAccessControlCreateWithFlags(
nil,
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
.userPresence, nil)
_ = controlHurtigt tjek
Husk, hvilken tilgængelighedsklasse der passer til en hemmelighed, som skal bruges i baggrunden.
Opsummering
Du har lært at begrænse adgangen til Keychain-elementer:
kSecAttrAccessibleangiver tilgængeligheden ud fra låsetilstanden:WhenUnlocked,AfterFirstUnlockog...ThisDeviceOnly-varianter, der springer sikkerhedskopier over.WhenPasscodeSetThisDeviceOnlyknytter elementet til, at der er angivet en adgangskode.SecAccessControlmed flag som.userPresenceeller.biometryCurrentSetkræver godkendelse på læsetidspunktet.- Vælg det strengeste niveau, som stadig tillader dit adgangsmønster.
Lær Swift med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 122
- Lektioner
- 409
Ofte stillede spørgsmål
Er lektionen “Adgangskontrol til Keychain” gratis?
Ja — alle 3 lektioner i læringssporet Swift Academy, inklusive “Adgangskontrol til Keychain”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Swift Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Adgangskontrol til Keychain”?
Beskyt elementer med biometri og oplåsning af enheden. Du øver dig i Swift Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Swift Academy?
Der kræves ingen tidligere erfaring. Swift Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Adgangskontrol til Keychain”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Swift Academy-lektion?
Ja. Alle Swift Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Lagring af hemmeligheder i Keychain
- Adgangskontrol til Keychain
- Biometrisk godkendelse
- Databeskyttelse og kryptering