การยืนยันตัวตนด้วยข้อมูลชีวมิติ
ยืนยันตัวตนผู้ใช้ด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การจัดเก็บข้อมูลลับใน Keychain
- การควบคุมการเข้าถึง Keychain
- การยืนยันตัวตนด้วยข้อมูลชีวมิติ
- การปกป้องข้อมูลและการเข้ารหัส