[swift] Swift KeychainAccess를 사용하여 사용자의 인증 토큰 만료를 관리하는 방법

사용자의 앱 인증 토큰은 일정 기간 동안 유효하며, 만료되면 새로운 토큰으로 갱신해야 합니다. 이러한 토큰 관리는 앱의 사용자 경험에 중요한 부분이므로 Swift KeychainAccess를 사용하여 토큰의 만료 관리를 쉽게 할 수 있습니다.

Swift KeychainAccess란?

Swift KeychainAccess는 iOS 앱에서 키체인에 안전하게 데이터를 저장하고 검색하는 데 사용되는 라이브러리입니다. 이를 통해 사용자 인증 토큰과 같은 중요한 데이터를 보호할 수 있습니다.

Swift KeychainAccess 사용 방법

  1. Swift KeychainAccess를 프로젝트에 추가합니다. 프로젝트의 Podfile에 다음을 추가합니다:
pod 'KeychainAccess'
  1. 터미널에서 프로젝트 디렉토리로 이동한 다음 pod install 명령어를 실행하여 CocoaPods를 업데이트합니다.

  2. KeychainAccess를 임포트합니다.

import KeychainAccess
  1. 토큰을 저장하는 함수를 만듭니다. 토큰은 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 함수는 저장된 토큰을 가져오고 만료되지 않았는지 확인합니다.

  1. 토큰 갱신 로직을 작성합니다. 예를 들어, 토큰이 만료되면 서버로부터 새로운 토큰을 가져와 저장합니다.
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를 사용하면 사용자의 인증 토큰 만료를 관리할 수 있습니다. 토큰을 안전하게 저장하고 가져오는 방법을 알았으며, 토큰의 만료 시간을 확인하여 적절하게 갱신하는 방법도 배웠습니다. 이를 통해 앱의 사용자 경험을 향상시킬 수 있습니다.

참고 자료