LDAP
필수 의존성: io.ktor:ktor-server-auth, io.ktor:ktor-server-auth-ldap
코드 예제: auth-ldap
LDAP는 사용자 정보를 저장할 수 있는 다양한 디렉터리 서비스와 연동하기 위한 프로토콜입니다. Ktor를 사용하면 basic, digest 또는 폼 기반(form-based) 인증 스키마를 사용하여 LDAP 사용자를 인증할 수 있습니다.
Ktor의 인증 및 권한 부여에 관한 일반적인 정보는 Ktor 서버의 인증 및 권한 부여 섹션에서 확인할 수 있습니다.
의존성 추가
LDAP 인증을 활성화하려면 빌드 스크립트에 ktor-server-auth 및 ktor-server-auth-ldap 아티팩트를 포함해야 합니다.
LDAP 구성
1단계: 인증 프로바이더 선택
LDAP 사용자를 인증하려면 먼저 사용자 이름과 비밀번호 검증을 위한 인증 프로바이더를 선택해야 합니다. Ktor에서는 이를 위해 basic, digest 또는 폼 기반(form-based) 프로바이더를 사용할 수 있습니다. 예를 들어, basic 인증 프로바이더를 사용하려면 install 블록 내부에서 basic 함수를 호출하세요.
import io.ktor.server.application.*
import io.ktor.server.auth.*
import io.ktor.server.auth.ldap.*
//...
install(Authentication) {
basic {
validate { credentials ->
// LDAP 사용자 인증
}
}
}validate 함수는 사용자 자격 증명(credentials)을 확인하는 데 사용됩니다.
2단계: LDAP 사용자 인증
LDAP 사용자를 인증하려면 ldapAuthenticate 함수를 호출해야 합니다. 이 함수는 UserPasswordCredential을 받아 지정된 LDAP 서버를 대상으로 검증합니다.
install(Authentication) {
basic("auth-ldap") {
validate { credentials ->
ldapAuthenticate(credentials, "ldap://0.0.0.0:389", "cn=%s,dc=ktor,dc=io")
}
}
}validate 함수는 인증에 성공하면 UserIdPrincipal을 반환하고, 인증에 실패하면 null을 반환합니다.
선택적으로, 인증된 사용자에 대해 추가적인 검증을 더할 수 있습니다.
install(Authentication) {
basic("auth-ldap") {
validate { credentials ->
ldapAuthenticate(credentials, "ldap://localhost:389", "cn=%s,dc=ktor,dc=io") {
if (it.name == it.password) {
UserIdPrincipal(it.name)
} else {
null
}
}
}
}
}3단계: 특정 리소스 보호
LDAP를 구성한 후에는 authenticate 함수를 사용하여 애플리케이션의 특정 리소스를 보호할 수 있습니다. 인증에 성공하면, 라우트 핸들러 내부에서 call.principal 함수를 사용하여 인증된 UserIdPrincipal을 가져와 인증된 사용자의 이름을 얻을 수 있습니다.
routing {
authenticate("auth-ldap") {
get("/") {
call.respondText("Hello, ${call.principal<UserIdPrincipal>()?.name}!")
}
}
}실행 가능한 전체 예제는 여기서 확인할 수 있습니다: auth-ldap.
현재 LDAP 구현은 동기식(synchronous)으로 작동한다는 점에 유의하세요.
