KeyChain Services
Securely store small chunks of data on behalf of the user
사용자를 대신하여 작은 데이터 덩어리를 안전하게 저장한다.
// 일반 비밀번호 저장용
let kSecClassGenericPassword: CFString
The value that indicates a generic password item.
// 인터넷용 아이디/패스워드 저장용
let kSecClassInternetPassword: CFString
The value that indicates an Internet password item.
// 인증서 저장용
let kSecClassCertificate: CFString
The value that indicates a certificate item.
// 암호화 키 저장용
let kSecClassKey: CFString
The value that indicates a cryptographic key item.
// ID 항목 저장용
let kSecClassIdentity: CFString
The value that indicates an identity item.
// MARK: - ADD
// Keychain에 저장할 데이터를 추가하는 쿼리 생성
let addQuery: [String: Any] = [
kSecClass as String: kSecClassGenericPassword, // Keychain 내에서 다루고자 하는 데이터의 유형을 지정합니다.
kSecAttrService as String: "service", // 데이터를 저장하는 서비스나 앱을 식별하는데 사용됩니다.
kSecAttrAccount as String: "key", // Keychain에서 데이터를 찾거나 식별하는데에 사용됩니다.
kSecValueData as String: "data" // 실제로 Keychain에 저장될 데이터를 의미합니다.
]
// 데이터를 Keychain에 추가합니다.
let addStatus = SecItemAdd(addQuery as CFDictionary, nil)
// MARK: - GET
// Keychain에서 데이터를 조회 위한 쿼리 생성
let getQuery: [String: Any] = [
kSecClass as String: kSecClassGenericPassword, // Keychain 내에서 다루고자 하는 데이터의 유형을 지정합니다.
kSecAttrService as String: "service", // 데이터를 저장하는 서비스나 앱을 식별하는데 사용됩니다.
kSecAttrAccount as String: "key", // Keychain에서 데이터를 찾거나 식별하는데에 사용됩니다.
kSecReturnData as String: kCFBooleanTrue, // Keychain에서 데이터를 가져올 때 반환할 데이터의 형태를 지정합니다.
kSecMatchLimit as String: kSecMatchLimitOne // 일치하는 항목의 수를 제한하는데 사용됩니다.
]
// 데이터를 Keychain에서 조회합니다.
var item: CFTypeRef?
let getStatus = SecItemCopyMatching(getQuery as CFDictionary, &item)
// MARK: - UPDATE
// Keychain에서 데이터를 업데이트하기 위한 쿼리 생성
let updateQuery: [String: Any] = [
kSecClass as String: kSecClassGenericPassword, // Keychain 내에서 다루고자 하는 데이터의 유형을 지정합니다.
kSecAttrService as String: "service", // 데이터를 저장하는 서비스나 앱을 식별하는데 사용됩니다.
kSecAttrAccount as String: "key", // Keychain에서 데이터를 찾거나 식별하는데에 사용됩니다.
]
// 업데이트할 데이터로 속성 설정
let attributes: [String: Any] = [
kSecValueData as String: "newData"
]
// 데이터를 Keychain에서 업데이트합니다.
let updateStatus = SecItemUpdate(updateQuery as CFDictionary, attributes as CFDictionary)
// MARK: - DELETE
// Keychain에서 데이터를 삭제하기 위한 쿼리 생성
let deleteQuery: [String: Any] = [
kSecClass as String: kSecClassGenericPassword, // Keychain 내에서 다루고자 하는 데이터의 유형을 지정합니다.
kSecAttrService as String: "service", // 데이터를 저장하는 서비스나 앱을 식별하는데 사용됩니다.
kSecAttrAccount as String: "key", // Keychain에서 데이터를 찾거나 식별하는데에 사용됩니다.
]
// 데이터를 Keychain에서 삭제합니다.
let deleteStatus = SecItemDelete(deleteQuery as CFDictionary)