0Pricing
Swift Academy · 강의

생체 인증

Face ID와 Touch ID로 사용자를 인증합니다.

생체 인증은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

LocalAuthentication을 사용한 생체 인식

얼굴 인식과 지문 인식을 사용하면 사용자가 암호를 입력하지 않고도 본인임을 증명할 수 있습니다. 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는 암호 대체 없이 얼굴 인식 또는 지문 인식을 요구합니다. .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"
    }
}

얼굴 인식 사용 설명 문자열

얼굴 인식을 사용하려면 Info.plist에 이유를 설명하는 NSFaceIDUsageDescription을 추가해야 합니다. 이를 생략하면 얼굴 인식 정책을 처음 평가할 때 앱이 충돌합니다. 지문 인식에는 이러한 키가 필요하지 않습니다.

// 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를 사용하고 evaluatePolicy를 호출하기 전에 canEvaluatePolicy를 호출합니다.
  • .deviceOwnerAuthenticationWithBiometrics는 생체 인식만 사용하고, .deviceOwnerAuthentication은 암호 대체를 추가합니다.
  • 올바른 문구를 표시하려면 biometryType을 읽고, .biometryLockout과 같은 LAError 코드를 처리합니다.
  • NSFaceIDUsageDescription을 추가하고, 실제 보호를 위해 키체인의 SecAccessControl과 함께 사용합니다.

자주 묻는 질문

“생체 인증” 강의는 무료인가요?

네 — “생체 인증” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“생체 인증”에서 뭘 배우나요?

Face ID와 Touch ID로 사용자를 인증합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Swift Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“생체 인증” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 키체인에 비밀 정보 저장하기
  2. 키체인 접근 제어
  3. 생체 인증
  4. 데이터 보호 및 암호화
← Swift Academy(으)로 돌아가기