Swift Academy · Oppitunti

Biometrinen tunnistautuminen

Tunnistakaa käyttäjät Face ID:llä ja Touch ID:llä.

Oppitunti 3/413 vaihetta

Biometrinen tunnistautuminen on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Swift Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Swift Academy-kurssilla on yhteensä 4 oppituntia.

Biometrinen tunnistus LocalAuthenticationilla

Face ID ja Touch ID antavat käyttäjien todistaa henkilöllisyytensä kirjoittamatta salasanaa. LocalAuthentication-kehys tarjoaa tämän LAContext-luokan kautta. Se arvioi tunnistautumiskäytännön ja kertoo, onnistuiko käyttäjän tunnistautuminen.

import LocalAuthentication
let context = LAContext()
// One LAContext object drives a single auth attempt

Saatavuuden tarkistaminen ensin

Kutsukaa aina canEvaluatePolicy-metodia ennen kehotteen näyttämistä. Laitteessa ei ehkä ole biometrisiä tunnistimia, käyttäjä ei ehkä ole määrittänyt biometrisiä tietoja tai biometrinen tunnistus voi olla lukittu. Metodi palauttaa Bool-arvon ja epäonnistuessaan virheen, joka selittää syyn.

import LocalAuthentication
func canUseBiometrics() -> Bool {
    let context = LAContext()
    var error: NSError?
    return context.canEvaluatePolicy(
        .deviceOwnerAuthenticationWithBiometrics,
        error: &error)
}

Kaksi käytäntöä

.deviceOwnerAuthenticationWithBiometrics vaatii Face ID:n tai Touch ID:n ilman pääsykoodiin siirtymistä. .deviceOwnerAuthentication yrittää käyttää biometristä tunnistusta, mutta siirtyy tarvittaessa laitteen pääsykoodiin. Valitkaa käytäntö sen mukaan, hyväksyttekö pääsykoodin käytön.

import LocalAuthentication
// Biometrics only (no passcode fallback):
let strict = LAPolicy.deviceOwnerAuthenticationWithBiometrics
// Biometrics with passcode fallback:
let lenient = LAPolicy.deviceOwnerAuthentication
_ = (strict, lenient)

Käytännön arviointi

evaluatePolicy suorittaa tunnistautumisen ja näyttää järjestelmän biometrisen tunnistautumisnäkymän. localizedReason-merkkijono kertoo käyttäjälle, miksi tunnistautumista pyydetään. Asynkroninen versio palauttaa Bool-arvon tai heittää poikkeuksen.

import LocalAuthentication
func authenticate() async -> Bool {
    let context = LAContext()
    do {
        return try await context.evaluatePolicy(
            .deviceOwnerAuthentication,
            localizedReason:
                String(localized: "Unlock your account"))
    } catch {
        return false
    }
}

Biometrisen tunnistuksen tyypin tunnistaminen

canEvaluatePolicy-kutsun jälkeen context.biometryType kertoo, käyttääkö laite .faceID-, .touchID-, .opticID- vai .none-tyyppiä. Käyttäkää tätä oikean kuvakkeen ja tekstin näyttämiseen omassa käyttöliittymässänne.

import LocalAuthentication
func biometryLabel() -> String {
    let context = LAContext()
    _ = context.canEvaluatePolicy(
        .deviceOwnerAuthenticationWithBiometrics, error: nil)
    switch context.biometryType {
    case .faceID:  return "Face ID"
    case .touchID: return "Touch ID"
    case .opticID: return "Optic ID"
    default:       return "Passcode"
    }
}

Virheiden käsitteleminen

Epäonnistumiset ilmoitetaan LAError-koodeina: .userCancel, .userFallback (käyttäjä valitsi pääsykoodin), .biometryLockout liian monen epäonnistuneen yrityksen jälkeen ja .biometryNotEnrolled. Käsitelkää nämä erikseen, jotta voitte antaa hyödyllisiä ohjeita yleisen virheilmoituksen sijaan.

import LocalAuthentication
func describe(_ error: Error) -> String {
    guard let la = error as? LAError else { return "failed" }
    switch la.code {
    case .userCancel:        return "cancelled"
    case .biometryLockout:   return "locked out"
    case .biometryNotEnrolled: return "not set up"
    default:                 return "failed"
    }
}

Face ID:n käyttöselite

Face ID:n käyttämiseksi Info.plist-tiedostoon on lisättävä NSFaceIDUsageDescription, joka selittää käyttötarkoituksen. Sen puuttuminen kaataa sovelluksen, kun Face ID -käytäntöä arvioidaan ensimmäisen kerran. Touch ID ei tarvitse vastaavaa avainta.

// Info.plist:
// NSFaceIDUsageDescription =
//   "We use Face ID to unlock your saved passwords."
let required = "NSFaceIDUsageDescription is mandatory"
_ = required

Näkymän mukauttaminen

Voitte mukauttaa kehotetta: localizedCancelTitle nimeää peruutuspainikkeen uudelleen ja localizedFallbackTitle määrittää varavaihtoehdon nimen tai piilottaa sen, kun arvona on tyhjä merkkijono. Tyhjän varavaihtoehdon nimen asettaminen piilottaa pääsykoodivaihtoehdon.

import LocalAuthentication
func configured() -> LAContext {
    let context = LAContext()
    context.localizedCancelTitle =
        String(localized: "Not now")
    context.localizedFallbackTitle = "" // hide fallback
    return context
}

Onnistuneen tunnistautumisen käyttäminen uudelleen

Oletuksena jokainen evaluatePolicy-kutsu näyttää uuden kehotteen. Määritteen touchIDAuthenticationAllowableReuseDuration avulla äskettäinen onnistunut lukituksen avaus voi täyttää myöhemmän tarkistuksen ilman uutta kehotetta — tämä on hyödyllistä, kun lyhyen ajan sisällä tehdään useita peräkkäisiä arkaluonteisia toimintoja.

import LocalAuthentication
func reusableContext() -> LAContext {
    let context = LAContext()
    context.touchIDAuthenticationAllowableReuseDuration = 30
    return context
}

Biometrinen tunnistus ja Keychain-suojaus

LAContext varmistaa käyttäjän henkilöllisyyden, mutta ei itsessään suojaa tietoja. Todellista suojausta varten yhdistäkää se Keychainin SecAccessControl-mekanismiin, jotta salaisuutta ei voi kryptografisesti lukea ennen onnistunutta tunnistautumista — sitä ei vain piiloteta tarkistetun Bool-arvon taakse.

import LocalAuthentication
// A bare evaluatePolicy == true is bypassable if your
// logic is tampered with. Prefer SecAccessControl so
// the data is encrypted until auth succeeds.
let pairing = "combine LAContext with Keychain ACL"
_ = pairing

Täydellinen lukituksen avaamisen työnkulku

Yhdistäkää saatavuuden tarkistaminen, tunnistustyyppiin perustuvat viestit, arviointi ja virheenkäsittely yhdeksi luotettavaksi rutiiniksi, jota käyttöliittymänne voi kutsua.

import LocalAuthentication
func unlock() async -> Bool {
    let context = LAContext()
    var err: NSError?
    guard context.canEvaluatePolicy(
        .deviceOwnerAuthentication, error: &err) else {
        return false
    }
    return (try? await context.evaluatePolicy(
        .deviceOwnerAuthentication,
        localizedReason:
            String(localized: "Access your vault"))) ?? false
}

Pikatarkistus

Palauttakaa mieleenne kahden pääkäytännön välinen ero.

Kertaus

Opitte biometrisen tunnistautumisen perusteet:

  • Käyttäkää LAContext-luokkaa ja kutsukaa canEvaluatePolicy-metodia ennen evaluatePolicy-metodia.
  • .deviceOwnerAuthenticationWithBiometrics sallii vain biometrisen tunnistautumisen; .deviceOwnerAuthentication lisää pääsykoodiin siirtymisen.
  • Lukekaa biometryType oikean sanamuodon käyttämiseksi ja käsitelkää LAError-koodeja, kuten .biometryLockout.
  • Lisätkää NSFaceIDUsageDescription ja yhdistäkää ratkaisu Keychainin SecAccessControl-mekanismiin todellisen suojauksen saavuttamiseksi.
Aloita maksutta

Opi Swift tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
122
Oppitunnit
409

Usein kysytyt kysymykset

Onko oppitunti ”Biometrinen tunnistautuminen” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Biometrinen tunnistautuminen”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Swift Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Biometrinen tunnistautuminen”?

Tunnistakaa käyttäjät Face ID:llä ja Touch ID:llä. Harjoittelet Swift Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Swift Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Swift Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Biometrinen tunnistautuminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Swift Academy-oppitunnilla?

Kyllä. Jokainen Swift Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Salaisuuksien tallentaminen Keychainiin
  2. Keychainin käyttöoikeuksien hallinta
  3. Biometrinen tunnistautuminen
  4. Tietosuoja ja salaus
← Takaisin: Swift Academy