[swift] Swift Moya에서 JWT 인증 사용하기

Moya는 Swift에서 네트워크 요청을 처리하는 라이브러리입니다. 이번 글에서는 Moya를 사용하여 JWT(JSON Web Token) 인증을 구현하는 방법에 대해 알아보겠습니다.

JWT란 무엇인가요?

JWT는 웹 애플리케이션에서 인증과 정상적인 작업을 보장하기 위해 사용되는 토큰 기반 인증 방식입니다. JWT는 클라이언트가 서버에 로그인 인증을 하고 나면 서버에서 클라이언트에게 JWT 토큰을 발급합니다. 이 토큰은 클라이언트가 로그인 상태를 유지하며 인증이 필요한 요청 시에 사용됩니다.

Moya에서 JWT 인증 구현하기

  1. 먼저, JWT 토큰을 서버에서 받아올 API를 Moya로 정의합니다.

    import Moya
    
    enum MyAPI {
        case login(email: String, password: String)
    }
    
    extension MyAPI: TargetType {
        var baseURL: URL {
            return URL(string: "https://example.com")!
        }
    
        var path: String {
            switch self {
            case .login:
                return "/api/login"
            }
        }
    
        var method: Moya.Method {
            switch self {
            case .login:
                return .post
            }
        }
    
        var task: Task {
            switch self {
            case let .login(email, password):
                return .requestParameters(parameters: ["email": email, "password": password], encoding: JSONEncoding.default)
            }
        }
    
        var headers: [String: String]? {
            // JWT 토큰을 헤더에 추가
            guard let jwtToken = TokenManager.shared.getJWTToken() else { return nil }
            return ["Authorization": "Bearer \(jwtToken)"]
        }
    }
    

    여기서 TokenManager.shared.getJWTToken()은 JWT 토큰을 가져오는 로직을 구현한 메소드입니다.

  2. JWT 토큰을 사용하여 인증이 필요한 요청을 보내는 코드를 작성합니다.

    import Moya
    
    let provider = MoyaProvider<MyAPI>()
    
    // 예시: 로그인 후 인증이 필요한 요청
    func getProfile() {
        provider.request(.login(email: "example@gmail.com", password: "password")) { (result) in
            switch result {
            case .success(let response):
                // 성공적으로 요청을 받았을 때의 동작
    
            case .failure(let error):
                // 요청이 실패했을 때의 동작
            }
        }
    }
    

    이제 Moya가 JWT 토큰을 헤더에 추가하여 요청을 처리합니다. 만약 JWT 토큰이 만료되었다면 서버에서는 인증되지 않은 요청으로 처리할 것입니다.

마무리

이번 글에서는 Moya를 사용하여 Swift에서 JWT 인증을 구현하는 방법을 알아보았습니다. JWT 토큰을 사용하여 클라이언트의 인증 상태를 유지하고, Moya를 통해 인증이 필요한 요청을 보낼 수 있는 환경을 만들 수 있습니다.

더 많은 정보를 알고 싶다면 Moya 공식 문서를 참고하시기 바랍니다.