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 ->
// Authenticate an LDAP user
}
}
}
validate
함수는 사용자 자격 증명을 확인하는 데 사용됩니다.
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) 방식임을 명심하십시오.