티스토리 뷰
이번 포스트에서는 Keychain을 사용하여 안전하게 데이터를 저장하고 불러오는 방법에 대해 살펴보고자 합니다.
Keychain은 디바이스 안에 암호화된 데이터 저장 공간을 의미합니다. 사용자는 암호화된 공간에 데이터를 안전하게 보관할 수 있습니다.
Keychain에 저장할 수 있는 데이터는 다양한 데이터가 포함될 수 있습니다.
사용자 계정 정보를 비롯하여 결제 지불 정보, 사용자 개인 정보 등 민감한 데이터를 모두 저장할 수 있습니다.
현재까지 Keychain 영역이 외부 침입자에 의해 뚫렸다는 소식이 없었을 만큼 안전한 공간입니다.
Keychain Service는 Keychain Service API를 통해 데이터를 암호화할 후 Keychain에 저장하게 됩니다. 아래 그림을 살펴보면 이해에 도움이 될 수 있습니다.
Keychain Item Class로는 아래와 같이 5가지가 존재합니다. 저장하려는 모든 데이터에 적합하도록 클래스가 구성되어 있지는 않지만 우리는 여기서 가장 관련있는 값을 선택하여 구현할 수 있습니다.
- kSecClassGenericPassword
- kSecClassInternetPassword
- kSecClassCertificate
- kSecClassIdentity
- kSecClassKey
이번 포스트에서는 kSecClassInternetPassword라는 Keychain Item Class를 사용하여 사용자 계정 정보를 처리하는 과정에 대해 살펴보도록 하겠습니다.
아래 코드는 간단하게 Keychain에 사용자 계정 로그인 정보를 저장하는 코드입니다.
let keychainItem = [
kSecValueData: "Password".data(using: .utf8)!,
kSecAttrAccount: "UserId",
kSecAttrServer: "test.com",
kSecClass: kSecClassInternetPassword
] as CFDictionary
let status = SecItemAdd(keychainItem, nil)
print("Operation finished with status: \(status)")
- kSecValueData : 비밀번호 정보
- kSecAttrAccount : 계정 ID 정보
- kSecAttrServer : 접속하려는 서버 정보
- kSecClass : Keychain Item Class
자, 그럼 이렇게 저장한 계정 정보를 어떻게 불러올 수 있을까요?
우선 Data를 Retrieve 할 수 있도록 query 프로퍼티를 정의해줍니다.
let query = [
kSecClass: kSecClassInternetPassword,
kSecAttrServer: "test.com",
kSecReturnAttributes: true,
kSecReturnData: true
] as CFDictionary
kSecAttrServer에 계정 정보를 불러올 서버 정보를 넣고 kSecReturnAttributes와 kSecReturnData에 true를 리턴시켜 값을 불러올 수 있도록 구성해줍니다.
그 다음 정의한 query에 맞는 결과를 SecItemCopyMatching함수를 통해 result로 값을 받아옵니다.
var result: AnyObject?
let status = SecItemCopyMatching(query, &result)
print("Operation finished with status: \(status)")
let dic = result as! NSDictionary
let username = dic[kSecAttrAccount] ?? ""
let passwordData = dic[kSecValueData] as! Data
let password = String(data: passwordData, encoding: .utf8)!
print("Username: \(username)")
print("Password: \(password)")
결과 값은 Dictionary이기 때문에 kSec 키 값을 이용하여 정보를 불러올 수 있는데, kSecAttrAccount, kSecValueData를 통해 계정 이름과 패스워드 정보를 가져올 수 있습니다.
위 코드를 실행하면 아래와 같은 화면을 볼 수 있습니다.
올바른 값을 받아온 것을 확인할 수 있습니다.
이번 포스트에서는 iOS의 안전한 데이터 저장 공간인 Keychain에 정보를 저장하고 불러오는 방법에 대해 간단하게 살펴보았습니다.
'Frontend > iOS' 카테고리의 다른 글
Mysteries of AutoLayout (0) | 2021.03.01 |
---|---|
Auto Layout을 코드로 구현해봅시다 (0) | 2021.02.01 |
[iOS] Swift UI Group, View 속성 사용해보기 (0) | 2020.03.28 |
[iOS] Swift UI 시작하기 (0) | 2020.03.28 |
[iOS] View를 Image로 Rendering하기 (0) | 2020.03.15 |
- Total
- Today
- Yesterday
- Kotlin
- Reactive programming
- watchos
- 아이폰
- apple
- 상속
- 안드로이드
- Auto Layout
- 애플워치
- Elliotable
- C++
- 컬렉션
- CloudComputing
- databinding
- retrofit
- Notissu
- 알고리즘
- java
- 함수형프로그래밍
- 함수형
- Apple Watch
- 스위프트
- Rxjava
- XCode
- 오토레이아웃
- 코틀린
- Swift
- android
- SwiftUI
- ios
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |