Skip to content

Ktor 클라이언트의 기본 인증

필수 의존성: io.ktor:ktor-client-auth

코드 예시: client-auth-basic

기본 인증 체계는 사용자 로그인에 사용될 수 있습니다. 이 체계에서 사용자 자격 증명은 Base64로 인코딩된 사용자 이름/비밀번호 쌍으로 전송됩니다.

서버 측에서 Ktor는 기본 인증 처리를 위한 Authentication 플러그인을 제공합니다.

기본 인증 흐름

기본 인증 흐름은 다음과 같습니다:

  1. 클라이언트는 서버 애플리케이션의 특정 리소스에 Authorization 헤더 없이 요청을 보냅니다.

  2. 서버는 클라이언트에 401 (Unauthorized) 응답 상태로 응답하고, WWW-Authenticate 응답 헤더를 사용하여 기본 인증 체계가 경로를 보호하는 데 사용됨을 알려줍니다. 일반적인 WWW-Authenticate 헤더는 다음과 같습니다:

    WWW-Authenticate: Basic realm="Access to the '/' path", charset="UTF-8"

    Ktor 클라이언트는 sendWithoutRequest 함수를 사용하여 WWW-Authenticate 헤더를 기다리지 않고 자격 증명을 보낼 수 있도록 합니다.

  3. 일반적으로 클라이언트는 사용자가 자격 증명을 입력할 수 있는 로그인 대화 상자를 표시합니다. 그런 다음 클라이언트는 Base64로 인코딩된 사용자 이름과 비밀번호 쌍을 포함하는 Authorization 헤더와 함께 요청을 보냅니다. 예시:

    Authorization: Basic amV0YnJhaW5zOmZvb2Jhcg
  4. 서버는 클라이언트가 보낸 자격 증명을 검증하고 요청된 콘텐츠로 응답합니다.

기본 인증 구성

Basic 체계를 사용하여 Authorization 헤더에 사용자 자격 증명을 보내려면 basic 인증 공급자를 다음과 같이 구성해야 합니다:

  1. install 블록 내에서 basic 함수를 호출합니다.

  2. BasicAuthCredentials를 사용하여 필요한 자격 증명을 제공하고 이 객체를 credentials 함수에 전달합니다.

  3. realm 속성을 사용하여 렐름(realm)을 구성합니다.

    kotlin
    val client = HttpClient(CIO) {
        install(Auth) {
            basic {
                credentials {
                    BasicAuthCredentials(username = "jetbrains", password = "foobar")
                }
                realm = "Access to the '/' path"
            }
        }
    }
  4. 선택적으로 WWW-Authenticate 헤더와 함께 401 (Unauthorized) 응답을 기다리지 않고 초기 요청에서 자격 증명을 보내도록 설정할 수 있습니다. sendWithoutRequest 함수(boolean 반환)를 호출하고 요청 매개변수를 확인해야 합니다.

    kotlin
    install(Auth) {
        basic {
            // ...
            sendWithoutRequest { request ->
                request.url.host == "0.0.0.0"
            }
        }
    }

전체 예시는 여기에서 찾을 수 있습니다: client-auth-basic.