Table of Contents
מבוא ל- Biometric Authentication ב-iOS
אימות ביומטרי הפך אבן הפינה של אבטחה ניידת מודרנית, המציע איזון בין נוחות והגנה. עבור מפתחי iOS, מסגרת ההסתה המקומית מספקת API פשוט אך רב עוצמה לשלב מזהה מגע, Face ID, והמכשיר עובר אימות ליישומים. מאמר זה עובר דרך תהליך מלא של יישום אימות ביומטרי באמצעות אישור ביומטרי מקומי, החל מהגדרה ראשונית ועד שיטות ייצור מוכנות, הבטחת היישום שלך עומד בראש הסטנדרטים של אבטחה המשתמש ופרטיות.
בסוף מדריך זה, אתה תבין כיצד לבדוק זמינות ביומטרית, משתמשים מהירים לאימות, לטפל שגיאות בחסד ולספק מנגנוני נפילה - כל זאת תוך ביצוע הנחיות של אפל לפרטיות המשתמש והגנה על נתונים.
הבנה של מסגרת ההנצחה המקומית
מסגרת ההסתה המקומית, שהוצגה ב- iOS 8, מספקת ממשק מאוחד להערכת זהות המשתמש באמצעות ביומטריקה או מכשיר עובר קוד.זה מפשט את ההבדלים החומריים הבסיסיים בין מזהה מגע לבין זיהוי פנים, ומאפשר לך לכתוב לוגיקה אימות שעובדת בצורה חלקה על פני כל המכשירים ה-iOS הנתמכות.
מרכיבים מרכזיים של המסגרת כוללים:
- (ב) [העיקרון]: [ה] [ה]] [ה]] [ה]] [ה]]] [העיקרון], הוא [ה] החפץ המרכזי שמנהל מדיניות אימות, מחרוזת הסיבה המקומית והתנהגויות של נפילה.
- (ב) [ה]] [ה]]: [ה] [ה]] [ה]] [ה]] [ה]]] [ה]]], [ה]] [ה]]]]] [ה]]], [ההעיקרון] [ההמופתים] [הה] [ה]] [הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההמו"ב"ב"ה']"ה']"ה']"ה']"ה']"ה']"ה']"ה']"ה']"ה']"ה']"ה']"ה']"ה']"ה']"ה']"ה']"ה']"ה']"ה']"ה']"ה']"ה']"ה']"ה' [ה
- (FLT:0)LAError: קודים שגיאה 1:1 אשר מודיעים לאפליקציית שלך מדוע אימות נכשל - ביומטריה לא זמין, משתמש ביטל, קוד לא מוגדר ואחרים.
בעוד המסגרת פשוטה לשימוש, יישום נכון דורש תשומת לב זהירה לחוויית המשתמש, טיפול בשגיאות ואבטחה. בואו לחקור את אפשרויות המדיניות בפירוט רב יותר.
מדיניות אימות להסביר
- (FLT:2) - אם biometry (זיהוי מגע או זיהוי פנים) נרשם וזמין, מדיניות זו מניעה את המשתמש עבור אימות ביומטרי בלבד.אם biometry אינה זמינה, הערכת המדיניות נכשלת ללא הצעת קוד קוד נופל.זה מתאים לפעילות בסיכון נמוך שבו אתה רוצה חוויה ללא חיכוך ויכול להתמודד עם היעדר החסד הדומטרי.
- (FLT:3) - מדיניות זו מנסה לראשונה אימות ביומטרי.אם biometry אינו זמין, המשתמש נכשל בחיסון, או המשתמש מבטל את המהירות הביומטרית, האפליקציה שלך יכולה לחזור ל-Crecode.זו המדיניות המומלצת עבור רוב תרחישים אימות כי זה מבטיח שגם כאשר biometry אינו אופציה, המשתמש עדיין יכול לאמת באמצעות קוד המעבר שלהם.
חשוב לציין כי ה- Passcode נופל רק לאחר שהמשתמש מבטל את המהירות הביומטרית או אם דומטריה נכשלת והמשתמש מקל על "Enter Passcode".אתה חייב להתמודד עם האירועים האלה כראוי כדי למנוע מבלבל את המשתמש.
שלב-בי-שלב
יישום אימות ביומטרי כרוך בחמישה שלבים ברורים: ייבוא המסגרת, יצירת מקרה 4 (FLT) לבדוק אם המדיניות הרצויה ניתן להעריך, ביצוע הערכה, ולטפל בתוצאות.
1.ייבוא המסגרת
החל בייבוא (FLT:5) בכל קובץ Swift שבו אתה מתכנן להשתמש באימות.הייבוא הזה נותן לך גישה ל-FLT:6, FLT 7, וכל סוגי השגיאה.
import LocalAuthentication
2. ליצור LAContext
(FLT:9) הוא האובייקט שאילת את מצב המערכת ולבצע את הערכת האימות.אתה יכול להגדיר באופן אופציונלי תכונות כגון FLT:10 (המסר המוצג למשתמש) ואת ה-FLT:11 (הטקסט עבור כפתור הנפילה) לדוגמה, אתה יכול לשנות את הכותרת הנפילה ל "מעבר קוד" במקום ברירת המחדל "הסיסמה של סיסמה".
let context = LAContext()
context.localizedFallbackTitle = "Use Passcode"
בדיקה אחרונה ב-3 ביולי 2008. ^ Biometric Availability
לפני שאתה קורא למשתמש, עליך לבדוק אם ניתן להעריך את המדיניות שנבחרה.הבדיקה חיונית כדי למנוע כשלון פתאומי שיכול לבלבל את המשתמש. השתמש בשיטת FLT:13, להעביר את המדיניות שאתה מתכוון להשתמש בה.השיטה מחזירה ערך בולט.
var error: NSError?
let canEvaluate = context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error)
if !canEvaluate {
// Handle the error – see section on error handling below
print("Authentication not available: \(error?.localizedDescription ?? "Unknown error")")
return
}
סיבות נפוצות לכישלון כוללות: המכשיר אינו תומך ב- biometry, אין טביעות אצבע או פנים רשומים, המכשיר עובר קוד אינו מוגדר, או היישום אין זכאות ל- Face ID (ראה שיטות הטובות ביותר).
4.הבנה את המדיניות
לאחר שהחלטתם שניתן להעריך את המדיניות, לקרוא ל-FLT:18 פרמטר פרמטר פרמטר פרמטר פרמטר :19 הוא מחרוזת המסבירה מדוע האפליקציה שלך זקוקה לאימות.מחרוזת זו חייבת להיות ברורה וידידותית למשתמש כי היא מוצגת ב-פני מערכת זיהוי הפנים, הסיבה היא תמיד מוצגת; עבור Touch ID, ייתכן שהיא מוצגת בהתאם לתצורה.
context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "Authenticate to access your secure data") { success, evaluateError in
DispatchQueue.main.async {
if success {
// Authentication successful
print("User authenticated successfully")
} else {
// Authentication failed or was cancelled
print("Authentication failed: \(evaluateError?.localizedDescription ?? "Unknown error")")
}
}
}
שימו לב כי מטפל הסיום אינו מובטח לרוץ על החוט הראשי.תמיד לשלוח עדכונים UI ולוגיקה מאוחרת ל תור הראשי, כפי שמוצג לעיל.
5.התחיל את התוצאה
כאשר האימות מצליח, אתה יכול להרשות גישה לתוכן מוגן או פעולות, כאשר הוא נכשל, עליך לקבוע את הסיבה על ידי בדיקת ה-FLT:21 הטעות תהיה סוג של סוגFLT:22, אשר הוא תואם למקרים נפוצים של FLT:23.
- (ב) [המשתמש יכול]: [ה] [ה] [ה]] [המשתמש] הדבק ב"יכול" בגליאת הביומטרית, ייתכן שפשוט תפטר את זרימת הכניסה או השבירה.
- .userFallback: The user tapped the fallback button (e.g., “Enter Password”). This triggers the passcode entry if using
.deviceOwnerAuthentication, but if you only used.deviceOwnerAuthenticationWithBiometrics, no fallback occurs. In that case, you should present your own passcode entry screen. - .biometryNotAvailable: Biometry is not available on this device (e.g., missing hardware). You should switch to passcode-only authentication.
- .biometryNotEnrolled: No biometric data is enrolled. Prompt the user to set up Touch ID or Face ID in Settings.
- .biometryLockout: Too many failed attempts; the system has locked biometry. You need to fall back to the passcode. The system passcode will reset the lockout.
- .passcodeNotSet: The device has no passcode configured. The user must set a passcode for biometry to work. Display an alert directing them to Settings.
Handling each of these cases gracefully is essential for a smooth user experience. For a production app, consider centralising your authentication logic in a manager class and providing clear feedback to the user.
Complete Example with Error Handling
Below is a more complete example that demonstrates a real-world authentication flow. It checks availability, handles errors with appropriate user alerts, and provides a fallback to a custom passcode entry if the user cancels biometry.
import LocalAuthentication
import UIKit
class BiometricAuthManager {
static let shared = BiometricAuthManager()
private let context = LAContext()
func authenticate(completion: @escaping (Bool, String?) -> Void) {
var error: NSError?
context.localizedFallbackTitle = "Use Passcode"
guard context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error) else {
// Determine the reason why authentication is unavailable
let message = errorMessage(for: error)
completion(false, message)
return
}
// Possibly show a loading state
context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "Authenticate to access your account") { success, evaluateError in
DispatchQueue.main.async {
if success {
completion(true, nil)
} else {
let message = self.errorMessage(for: evaluateError as? LAError)
completion(false, message)
}
}
}
}
private func errorMessage(for error: LAError?) -> String {
guard let error = error else {
return "Authentication could not be completed."
}
switch error.code {
case .biometryNotAvailable:
return "Biometric authentication is not available on this device."
case .biometryNotEnrolled:
return "No biometric data is enrolled. Please set up Face ID or Touch ID in Settings."
case .biometryLockout:
return "Too many failed attempts. Please use your passcode to unlock biometrics."
case .passcodeNotSet:
return "A device passcode is required to use biometric authentication."
case .userCancel:
return "Authentication cancelled by user."
case .userFallback:
return "User chose to use the passcode."
default:
return "Authentication failed: \(error.localizedDescription)"
}
}
}
שיעור זה מבסס את ההיגיון האימות וחוזר על תוצאה נקייה / מנקה עם הודעה ידידותית למשתמש.
שיטות ושיקולי ייצור הטובים ביותר
בעוד הקוד לעיל מספק בסיס מוצק, כמה שיטות נוספות יבטיחו את היישום שלך הוא חזק, מאובטח וידידותי למשתמש.
תמיד לספק רצף של Fallback
גם אם אתה משתמש במדיניות ה- 27 של ליגת ה-FLT, עליך להיות מסך הכניסה שלך מוכן.למשתמשים רבים אין ביומטריות שנרשמו או עשויים מעדיפים להשתמש ב- Passcode במצבים מסוימים.הנחיות של אפל ממלמלצות להציע אלטרנטיבה ברורה לדומטריה.
השתמש בהגיון מקומי
המחרוזת המוצגת במערכת של מערכת השידור צריכה להיות תמציתית ומפורטת לפעולה שהמשתמש עומד לאשר.לדוגמה, "ברגע לחשבון" עדיף על "התראות הנדרשת" מעורפלת, כמו גם למקם את המחרוזת הזו לשפות שונות.
לכבד פרטיות המשתמש
לעולם אל תאחסן נתונים ביומטריים (תבניות טביעת אצבע או מפות פנים) בעצמך.המערכת מנהלת באופן מאובטח נתונים אלה על ה- Secure Enclave.ה אפליקציה שלך מקבלת רק תוצאה של הצלחה בוטה / נפילה, לא נתונים ביומטריים אמיתיים.
מבחן על מכשירים אמיתיים
סימולטור יש יכולות סימולציה ביומטריות מוגבלות.תמיד לבדוק את מזהה Touch ו- Face ID על אייפון ו-iPad בפועל.עבור זיהוי פנים, עליך לכלול גם את המפתח FLT:29 ב-FLT:30; אחרת, האפליקציה תתרסק כאשר תנסה להעריך זיהוי פנים.
עקבו אחרי App Lifecycle
אם האפליקציה שלך משתמשת באימות ביומטרי כדי להבטיח מצב רקע, שקול מחדש כאשר האפליקציה חוזרת לקדמת הבמה.You יכול לצפות ב-FLT:31 ולהוביל שוב לאימות.
שילוב עם Keychain לביטחון חזק יותר
אימות ביומטרי לבדו רק מאמת את זהותו של המשתמש ברגע הבדיקה.לביטחון מתמשך (למשל, אחסון אסימונים של API), משלב ביומטריות עם Keychain. השתמש בכיתת ה-FLT:32 עם ה-FLT:33 או FLT 34 דגלים כדי להבטיח כי ניתן לגשת רק לאחר אימות ביומטרי מוצלח או עובר.
Fallback לאחר Lockout
כאשר דומטריה נעולה בשל ניסיונות כושלים רבים מדי, עליך לחזור אל המכשיר קודר.הכניסה של המערכת יעבור קוד תחדש אוטומטית את מנעול הביומטרי, כך שלאחר כניסה מוצלחת, ניסיונות ביומטריים עתידיים יעבדו שוב.אל תנסה לעקוף את זה; זה מאפיין אבטחה להגן מפני התקפות כוח רע.
ההבדל בין Touch ID ו- Face ID
למרות שמסגרת ההנצחה המקומית מופשטת ברוב ההבדלים, יש כמה ניואנסים שיש לזכור:
- (ב) ,0) מזהה Face דורש מכשיר עם מצלמה אמיתית.FLT:1 אתה צריך לבדוק את FLT:35 לאחר קריאה FLT:36 כדי לקבוע איזה סוג ביומטרי זמין.
- (FLT:0) מזהה מזהה יש רגישות גבוהה יותר לנסיעה.ראה פרק 1: המשתמש חייב להסתכל ישירות על המכשיר.
- (FLT:0) מראה אלטר עבור Face ID:FearLT:1; iOS 15.4 ואילך מאפשר למשתמשים להגדיר מראה חלופי (למשל, עם משקפיים או מסכה). אפליקציה שלך אינה צריכה לעשות שום דבר מיוחד; המערכת מטפלת בו באופן אוטומטי.
- (FLT:0) תמיכה בזיהוי פנים: FLT:1 גירסאות iOS האחרונות לתמוך בתוכנות באמצעות Apple Watch.עבור אימות ברמת האפליקציה, מילת הזיהוי של Face ID עשויה עדיין לדרוש הכרה פנים מלאה, אלא אם המשתמש בחר להשתמש במסכה עם Apple Watch.
טעות עמוקה
אנו כיסו בקצרה שגיאות נפוצות, אך כדאי להתפשר על איך להגיב לכל אחד באופן ידידותי למשתמש.
| Error Code | User Feedback |
|---|---|
biometryNotAvailable | Show an alert: “Face ID / Touch ID is not available on this device. Please use your passcode.” Then offer your custom passcode screen. |
biometryNotEnrolled | Present an alert that directs the user to Settings > Face ID & Passcode (or Touch ID & Passcode). You can open Settings directly using UIApplication.openSettingsURLString. |
biometryLockout | Prompt the user to authenticate using the device passcode. The system passcode entry will reset the lockout. If you use the .deviceOwnerAuthentication policy, the system automatically handles the passcode prompt. If you used .deviceOwnerAuthenticationWithBiometrics, you must fall back to your own passcode entry or invoke the .deviceOwnerAuthentication policy again to trigger the system passcode UI. |
passcodeNotSet | Alert the user that a device passcode is required. Direct them to Settings to set one. You cannot continue until the passcode is configured. |
userCancel | Simply dismiss or return to the previous screen. Do not show an error; the user intentionally cancelled. |
userFallback | The user chose the fallback option. Present your own passcode entry screen (or rely on the system passcode if you used the combined policy). |
ביצועים וקישורים
שיטת ה-FLT:48 היא מסונכרנית ואינה חוסמת את החוט הראשי.עם זאת, ניתן לקרוא לו מטפל הסיום על חוט רקע.תמיד לשלוח עדכונים UI לתור הראשי.בנוסף, להימנע מיצירת חוט חדש (FLT:49) עבור כל ניסיון אימות; שימוש חוזר במקרה אם אפשרי, אך להיות מודע לכך שההקשר יכול להיות לא חוקי לאחר נעילה ביולוגית או הפעלה מחדש של שיטה חדשה, כדי להבטיח את הקשר האחרון עבור כל פעולה חדשה.
בדיקה ב- Biometric Authentication
אתה יכול לדמות אימות ביומטרי ב- iOS סימולטור באמצעות התפריט Hardware. for Touch ID, באפשרותך לבחור "Touch ID" ולאחר מכן "Matching Touch" או "לא-התאמה מגע" עבור Face ID, סימולטור מאפשר לך להזין פרצוף ולאחר מכן לבצע התאמה או לא תואם ניסיונות.
בנוסף, ניתן להשתמש בתוכניות מבחן של Xcode כדי לכתוב בדיקות יחידות סביב מנהל האימות שלך על ידי לעג למעמד של ההרחבה (FLT:50), בתנאי שאתה מעצב את הקוד שלך עם הזרקת התלות.זה מאפשר לך לבחון לוגיקה טיפול שגיאות מבלי להסתמך על חומרה אמיתית.
משאבים חיצוניים
לקריאה נוספת ותיעוד רשמי, מתייחס לבאים:
- (ב) ,0) מסמך ההסתה המקומי של אפל
- (ב) ויקרא י"ד:
- (FLT:0)WDC 2017 - בניית אפליקציות עם Face IDIRLT 1
- (ב) ,0) שירותים ו- Biometric Access ControlFIRLT:1
מסקנה
יישום אימות ביומטרי עם מסגרת ההסתה המקומית הוא תהליך פשוט אשר משפר באופן משמעותי את היציבה של אפליקציית iOS שלך תוך שמירה על חוויית משתמש נוזלית. על ידי בדיקת זמינות, טיפול שגיאות בחסד, ומספק אפשרויות נפילה אמינות, אתה יכול לבנות מערכת אימות כי מכבדת פרטיות המשתמש ועונה על הנחיות מחמירות של אפל.
זכור כי אימות ביומטרי הוא רק חלק אחד של אסטרטגיה אבטחה מקיפה.שלב אותו עם אחסון מאובטח באמצעות Keychain, אבטחת רשת וניהול הישיב הנכון להציע למשתמשים שלך את הרמה הגבוהה ביותר של הגנה.עם הקוד ושיטות הטובות ביותר משותפות במאמר זה, אתה מצויד היטב לשלב מזהה מגע ו Face ID לתוך פרויקט iOS הבא שלך.