[swift] 스위프트 아폴로에서의 요청 인증 방법

스위프트를 사용하여 웹 서비스에 요청을 보낼 때, 종종 요청을 인증해야 합니다. 이를 위해 자주 사용되는 라이브러리 중 하나는 아폴로(Apollo)입니다. 이 블로그 포스트에서는 스위프트 아폴로에서의 요청 인증 방법에 대해 알아보겠습니다.

1. 헤더에 토큰 추가하기

요청을 보낼 때, 일반적으로 토큰을 헤더에 추가하여 인증을 처리합니다. 스위프트 아폴로에서는 HTTPInterceptorProvider를 사용하여 모든 요청에 헤더를 추가할 수 있습니다. 아래는 예시입니다.

import Apollo
import ApolloWebSocket

let interceptorProvider = LegacyInterceptorProvider(store: apolloStore, shouldPersistQueries: true, storeQueue: storeQueue)

interceptorProvider.addInterceptor(MyAuthInterceptor())

MyAuthInterceptorHTTPRequestInterceptor 프로토콜을 채택한 사용자 정의 인터셉터입니다. 이 인터셉터에서 헤더에 토큰을 추가할 수 있습니다.

2. 토큰 캐싱 및 갱신

토큰은 일반적으로 만료되기 때문에, 토큰을 캐싱하고 갱신하는 로직을 구현해야 합니다. 아래는 토큰을 캐싱하고 갱신하는 예시입니다.

class TokenManager {
  static let shared = TokenManager()
  
  private var token: String?
  
  func getToken(completion: @escaping (String?) -> Void) {
    if let token = token, !isExpired(token) {
      // 캐시된 토큰이 있고, 만료되지 않은 경우
      completion(token)
    } else {
      // 토큰을 새로 발급받아 캐싱
      refreshToken { newToken in
        self.token = newToken
        completion(newToken)
      }
    }
  }
  
  private func refreshToken(completion: @escaping (String?) -> Void) {
    // 토큰 갱신 로직 구현
    // 새로운 토큰을 completion으로 전달
    // 로그인 정보나 기타 필요한 파라미터를 사용하여 서버에 요청
  }
  
  private func isExpired(_ token: String) -> Bool {
    // 토큰의 만료 여부를 체크하는 로직 구현
  }
}

위의 코드에서 getToken 함수는 캐시된 토큰이 유효한지 확인하고, 만료되었다면 새로운 토큰을 발급받아 캐시하고 반환합니다.

3. 요청 시 토큰 활용하기

인증된 토큰을 통해 요청을 보내려면, 아폴로 클라이언트를 생성할 때 토큰을 사용하여 설정해야 합니다. 아래는 예시입니다.

import Apollo
import ApolloWebSocket

let websocket = WebSocketTransport(url: websocketURL)
let apolloClient = ApolloClient(networkTransport: websocket, store: apolloStore, shouldAutoPersist: true)

TokenManager.shared.getToken { token in
  if let token = token {
    apolloClient.clientIdentifier = token
    apolloClient.additionalHeaders = ["Authorization": "Bearer \(token)"]
  }
}

위의 코드에서 TokenManager.shared.getToken 함수를 사용하여 토큰을 가져온 후, 클라이언트를 생성하고 추가적인 헤더를 설정합니다.

결론

스위프트 아폴로를 사용하여 웹 서비스에 요청을 보낼 때 토큰 인증을 구현하는 방법에 대해 알아보았습니다. 토큰을 헤더에 추가하고, 캐싱하고 갱신하며, 요청 시 토큰을 활용하는 방법을 살펴보았습니다. 이러한 방법을 활용하여 보다 안전하고 신뢰할 수 있는 웹 서비스 요청을 구현할 수 있습니다.


참고 문서: