iOS/Swift

iOS Keychain 사용 방법과 예제

당근쥬스 2023. 10. 26. 10:48
반응형

소개

iOS 앱에서 민감한 정보를 안전하게 저장하려면 Keychain을 사용하는 것이 좋습니다. Keychain은 iOS 시스템에서 제공하는 안전한 저장소로, 패스워드, 토큰, 인증 정보 등을 안전하게 보관할 수 있습니다. 이번 포스트에서는 iOS Keychain의 사용 방법과 예제 코드를 소개합니다.

 

Keychain 사용 방법 :

1. Security.framework 추가

먼저 프로젝트에 `Security.framework`을 추가해야 합니다. 이 프레임워크는 Keychain에 접근할 수 있는 메서드를 제공합니다.

 

2. KeychainWrapper 클래스 생성

Keychain 접근을 간편하게 하기 위해 `KeychainWrapper` 클래스를 생성합니다. 이 클래스는 Keychain에 값을 저장하고 가져오는 등의 작업을 수행합니다.

import Foundation
import Security

class KeychainWrapper {
    // ...
}

3. 값 저장하기

static func saveValue(_ value: String, forKey key: String) {
    let data = value.data(using: .utf8)!
    
    let query: [String: Any] = [
        kSecClass as String: kSecClassGenericPassword,
        kSecAttrAccount as String: key,
        kSecValueData as String: data
    ]
    
    SecItemDelete(query as CFDictionary)
    
    let status = SecItemAdd(query as CFDictionary, nil)
    assert(status == errSecSuccess, "Failed to save value in Keychain")
}

4. 값 불러오기

static func loadValue(forKey key: String) -> String? {
    let query: [String: Any] = [
        kSecClass as String: kSecClassGenericPassword,
        kSecAttrAccount as String: key,
        kSecReturnData as String: kCFBooleanTrue!,
        kSecMatchLimit as String: kSecMatchLimitOne
    ]
    
    var dataTypeRef: AnyObject?
    let status = SecItemCopyMatching(query as CFDictionary, &dataTypeRef)
    
    if status == errSecSuccess, let data = dataTypeRef as? Data {
        return String(data: data, encoding: .utf8)
    } else {
        return nil
    }
}

예제 코드 :

1. 값 저장하기

KeychainWrapper.saveValue("mySecretToken123", forKey: "AuthToken")

2. 값 불러오기

if let authToken = KeychainWrapper.loadValue(forKey: "AuthToken") {
    print("AuthToken: \(authToken)")
} else {
    print("AuthToken not found")
}

 

결론

iOS Keychain은 민감한 정보를 안전하게 보관할 수 있는 훌륭한 방법입니다. 이번 포스트에서는 Keychain을 설정하고 값을 저장하고 불러오는 간단한 예제를 살펴보았습니다. 이를 통해 앱에서 보안을 강화하고 사용자 데이터를 안전하게 관리할 수 있습니다.

반응형