[swift] Swift KeychainAccess를 사용하여 사용자의 인증 토큰 만료를 관리하는 방법
사용자의 앱 인증 토큰은 일정 기간 동안 유효하며, 만료되면 새로운 토큰으로 갱신해야 합니다. 이러한 토큰 관리는 앱의 사용자 경험에 중요한 부분이므로 Swift KeychainAccess를 사용하여 토큰의 만료 관리를 쉽게 할 수 있습니다.
Swift KeychainAccess란?
Swift KeychainAccess는 iOS 앱에서 키체인에 안전하게 데이터를 저장하고 검색하는 데 사용되는 라이브러리입니다. 이를 통해 사용자 인증 토큰과 같은 중요한 데이터를 보호할 수 있습니다.
Swift KeychainAccess 사용 방법
- Swift KeychainAccess를 프로젝트에 추가합니다. 프로젝트의
Podfile
에 다음을 추가합니다:
pod 'KeychainAccess'
-
터미널에서 프로젝트 디렉토리로 이동한 다음
pod install
명령어를 실행하여 CocoaPods를 업데이트합니다. -
KeychainAccess
를 임포트합니다.
import KeychainAccess
- 토큰을 저장하는 함수를 만듭니다. 토큰은 Keychain에 저장하고 키체인에서 검색할 때마다 토큰의 만료 시간을 확인합니다.
func saveToken(_ token: String, expiresAt: Date) {
let keychain = Keychain(service: "com.example.app")
keychain["auth_token"] = token
keychain["expires_at"] = "\(expiresAt.timeIntervalSince1970)"
}
func getToken() -> String? {
let keychain = Keychain(service: "com.example.app")
guard let token = keychain["auth_token"],
let expiresAtString = keychain["expires_at"],
let expiresAt = Double(expiresAtString),
Date().timeIntervalSince1970 < expiresAt else {
return nil
}
return token
}
위의 코드에서 saveToken
함수는 토큰과 만료시간을 저장하고, getToken
함수는 저장된 토큰을 가져오고 만료되지 않았는지 확인합니다.
- 토큰 갱신 로직을 작성합니다. 예를 들어, 토큰이 만료되면 서버로부터 새로운 토큰을 가져와 저장합니다.
func refreshToken(completion: @escaping (String?) -> Void) {
// 토큰 갱신 로직 작성
// 토큰 갱신에 성공하면 completion 핸들러에 새로운 토큰을 전달합니다.
// 실패하면 completion 핸들러에 nil을 전달합니다.
}
func refreshOrGetToken(completion: @escaping (String?) -> Void) {
if let token = getToken() {
// 토큰이 존재하고 만료되지 않았음
completion(token)
} else {
refreshToken { newToken in
guard let token = newToken else {
completion(nil)
return
}
let expiresAt = Date().addingTimeInterval(3600) // 1시간 후 만료
saveToken(token, expiresAt: expiresAt)
completion(token)
}
}
}
위의 코드에서 refreshOrGetToken
함수는 저장된 토큰을 가져오거나 만료되었을 경우 토큰을 갱신합니다. refreshToken
함수를 사용하여 토큰을 갱신하고, 갱신에 성공하면 새로운 토큰을 저장합니다.
요약
Swift KeychainAccess를 사용하면 사용자의 인증 토큰 만료를 관리할 수 있습니다. 토큰을 안전하게 저장하고 가져오는 방법을 알았으며, 토큰의 만료 시간을 확인하여 적절하게 갱신하는 방법도 배웠습니다. 이를 통해 앱의 사용자 경험을 향상시킬 수 있습니다.