비플페이에 생체인증이 있어 한번 공부해보고 싶어서 해보기로 했다 ㅎㅎ
LocalAuthentication 프레임워크 → 인증 기능
Local Authentication
Authenticate users biometrically or with a passphrase they already know.
생체 인식 또는 이미 알고 있는 암호로 사용자를 인증한다.
보안상 앱이 직접적으로 인증 데이터에 접근할 수 없도록 되어 있다.
그 대신 하드웨어 기반 보안 프로세서인 Secure Enclave 가 인증 데이터를 관리한다.
그래서 앱이 LocalAuthentication 을 통해서 인증을 요청하면, 앱은 인증 결과만 받을 수 있다.
앱 LocalAuthentication Secure Enclave
Set the Face ID Usage Description
생체 인식을 사용하는 모든 프로젝트에서 앱의 Info.plist 파일에 NSFaceIDUsageDescription 키를 포함한다.
이 키가 없으면 시스템에서 앱이 Face ID를 사용하는 것을 허용하지 않는다.
이 키의 값은 앱이 처음으로 Face ID를 사용하려고 시도할 때 시스템이 사용자에게 표시하는 문자열이다.
예제코드
//
// ContentView.swift
// LocalAuthenticationEx-SwiftUI
//
// Created by Hyungjun KIM on 7/5/24.
//
import SwiftUI
import LocalAuthentication
struct ContentView: View {
@State private var laLabel = "버튼을 눌러 생체인식을 시작하세요."
var body: some View {
VStack {
Text(laLabel)
.padding()
Image(systemName: "faceid")
.resizable()
.frame(width: 100, height: 100)
.padding()
Button(action: {
authenticateUser()
}) {
Text("Start Biometric Authtication")
.padding()
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(8)
}
}
}
func authenticateUser() {
let context = LAContext()
var error: NSError?
if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) {
let reason = "생체인식을 사용하여 인증하세요."
context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: reason) { success, authenticationError in
DispatchQueue.main.async {
if success {
self.laLabel = "생체인식이 성공적으로 이루어졌습니다."
}
else {
self.laLabel = "생체인식에 실패했습니다. 다시 시도하세요."
}
}
}
}
else {
DispatchQueue.main.async {
self.laLabel = "생체인식을 사용할 수 없습니다. 설정에서 생체인식을 활성화하세요."
}
}
}
}
#Preview {
ContentView()
}
Swift
복사
결과물
SwiftUI 버전
SwiftUI 버전
SwiftUI 버전
UIKit 버전