0Pricing
Swift Academy · บทเรียน

การยืนยันตัวตนด้วยข้อมูลชีวมิติ

ยืนยันตัวตนผู้ใช้ด้วย Face ID และ Touch ID

การยืนยันตัวตนด้วยข้อมูลชีวมิติ เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

ไบโอเมตริกซ์ด้วย LocalAuthentication

Face ID และ Touch ID ช่วยให้ผู้ใช้พิสูจน์ตัวตนได้โดยไม่ต้องพิมพ์รหัสผ่าน เฟรมเวิร์ก LocalAuthentication เปิดให้ใช้ความสามารถนี้ผ่าน LAContext ซึ่งจะประเมินนโยบายการยืนยันตัวตนและแจ้งว่าผู้ใช้ผ่านหรือไม่

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

ตรวจสอบความพร้อมใช้งานก่อน

เรียก canEvaluatePolicy ก่อนแสดงคำขอยืนยันตัวตนเสมอ อุปกรณ์อาจไม่มีฮาร์ดแวร์ไบโอเมตริกซ์ ผู้ใช้อาจยังไม่ได้ลงทะเบียน หรือไบโอเมตริกซ์อาจถูกล็อกไม่ให้ใช้งาน เมธอดนี้จะคืนค่าบูลีนและข้อผิดพลาดที่อธิบายสาเหตุเมื่อทำงานไม่สำเร็จ

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

นโยบายสองแบบ

.deviceOwnerAuthenticationWithBiometrics กำหนดให้ใช้ Face ID หรือ Touch ID โดยไม่มีทางเลือกสำรองเป็นรหัสผ่าน ส่วน .deviceOwnerAuthentication จะลองใช้ไบโอเมตริกซ์ก่อน แต่จะเปลี่ยนไปใช้รหัสผ่านของอุปกรณ์เป็นทางเลือกสำรอง เลือกให้เหมาะกับการที่คุณยอมรับการใช้รหัสผ่านหรือไม่

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

การประเมินนโยบาย

evaluatePolicy ดำเนินการยืนยันตัวตนและแสดงแผ่นหน้าต่างไบโอเมตริกซ์ของระบบ สตริง localizedReason อธิบายให้ผู้ใช้ทราบว่าทำไมคุณจึงขอการยืนยันตัวตน รูปแบบแบบอะซิงโครนัสจะคืนค่าบูลีนหรือส่งข้อผิดพลาด

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
    }
}

การตรวจจับชนิดไบโอเมตริกซ์

หลังจากเรียก canEvaluatePolicy แล้ว context.biometryType จะแจ้งว่าอุปกรณ์ใช้ .faceID, .touchID, .opticID หรือ .none ใช้ข้อมูลนี้เพื่อแสดงไอคอนและข้อความที่ถูกต้องในส่วนติดต่อผู้ใช้ของคุณ

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"
    }
}

การจัดการข้อผิดพลาด

ความล้มเหลวจะมาในรูปแบบรหัส LAError: .userCancel, .userFallback (ผู้ใช้เลือกใช้รหัสผ่าน), .biometryLockout หลังยืนยันไม่สำเร็จหลายครั้ง และ .biometryNotEnrolled ตรวจสอบรหัสเหล่านี้เพื่อให้คำแนะนำที่เป็นประโยชน์ แทนการแสดงข้อผิดพลาดทั่วไป

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

หากต้องการใช้ Face ID คุณต้องเพิ่ม NSFaceIDUsageDescription ลงใน Info.plist พร้อมอธิบายเหตุผล การไม่เพิ่มคีย์นี้จะทำให้แอปหยุดทำงานในครั้งแรกที่คุณประเมินนโยบาย Face ID ส่วน Touch ID ไม่ต้องใช้คีย์ดังกล่าว

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

การปรับแต่งแผ่นหน้าต่าง

คุณปรับแต่งข้อความแจ้งได้: localizedCancelTitle เปลี่ยนชื่อปุ่มยกเลิก และ localizedFallbackTitle กำหนดหรือซ่อนตัวเลือกสำรองเมื่อกำหนดเป็นค่าว่าง การตั้งชื่อทางเลือกสำรองเป็นค่าว่างจะซ่อนตัวเลือกใช้รหัสผ่าน

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

การใช้การยืนยันตัวตนที่สำเร็จซ้ำ

โดยค่าเริ่มต้น การเรียก evaluatePolicy แต่ละครั้งจะแสดงคำขอใหม่ การตั้งค่า touchIDAuthenticationAllowableReuseDuration ทำให้การปลดล็อกที่สำเร็จเมื่อไม่นานมานี้ใช้ยืนยันการตรวจสอบครั้งถัดไปได้โดยไม่ต้องแสดงคำขอใหม่ เหมาะสำหรับการดำเนินการที่มีความละเอียดอ่อนหลายรายการภายในช่วงเวลาสั้น ๆ

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

ไบโอเมตริกซ์เทียบกับการจำกัดการเข้าถึงพวงกุญแจ

LAContext ใช้ตรวจสอบผู้ใช้ แต่ไม่ได้ปกป้องข้อมูลด้วยตัวเอง เพื่อความปลอดภัยที่แท้จริง ให้ใช้ร่วมกับ SecAccessControl ของพวงกุญแจ เพื่อให้ข้อมูลลับอ่านไม่ได้ในเชิงการเข้ารหัสจนกว่าการยืนยันตัวตนจะสำเร็จ ไม่ใช่เพียงซ่อนไว้เบื้องหลังค่าบูลีนที่ตรวจสอบแล้ว

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

ขั้นตอนการปลดล็อกที่สมบูรณ์

รวมการตรวจสอบความพร้อมใช้งาน การส่งข้อความตามชนิด การประเมินนโยบาย และการจัดการข้อผิดพลาดไว้ในกระบวนการที่แข็งแกร่งเพียงชุดเดียว ซึ่งส่วนติดต่อผู้ใช้ของคุณสามารถเรียกใช้ได้

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
}

ตรวจสอบความเข้าใจ

ทบทวนความแตกต่างระหว่างนโยบายหลักสองแบบ

สรุปทบทวน

คุณได้เรียนรู้การยืนยันตัวตนด้วยไบโอเมตริกซ์:

  • ใช้ LAContext และเรียก canEvaluatePolicy ก่อน evaluatePolicy
  • .deviceOwnerAuthenticationWithBiometrics ใช้ไบโอเมตริกซ์เท่านั้น ส่วน .deviceOwnerAuthentication เพิ่มทางเลือกสำรองเป็นรหัสผ่าน
  • อ่านค่า biometryType เพื่อใช้ข้อความที่ถูกต้อง และจัดการรหัส LAError เช่น .biometryLockout
  • เพิ่ม NSFaceIDUsageDescription และใช้ร่วมกับ SecAccessControl ของพวงกุญแจเพื่อการปกป้องที่แท้จริง

คำถามที่พบบ่อย

บทเรียน “การยืนยันตัวตนด้วยข้อมูลชีวมิติ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การยืนยันตัวตนด้วยข้อมูลชีวมิติ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การยืนยันตัวตนด้วยข้อมูลชีวมิติ”

ยืนยันตัวตนผู้ใช้ด้วย Face ID และ Touch ID คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การยืนยันตัวตนด้วยข้อมูลชีวมิติ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม

ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การจัดเก็บข้อมูลลับใน Keychain
  2. การควบคุมการเข้าถึง Keychain
  3. การยืนยันตัวตนด้วยข้อมูลชีวมิติ
  4. การปกป้องข้อมูลและการเข้ารหัส
← กลับไปที่ Swift Academy