Skip to content

LDAP

必需的依赖项: io.ktor:ktor-server-auth, io.ktor:ktor-server-auth-ldap

代码示例: auth-ldap

原生服务器
Ktor 支持 Kotlin/Native,允许你无需额外的运行时或虚拟机即可运行服务器。
支持: ✖️

LDAP 是一种用于处理各种目录服务的协议,这些服务可以存储用户信息。Ktor 允许你使用基本认证摘要认证基于表单的认证方案来认证 LDAP 用户。

你可以在Ktor 服务器中的认证与授权章节中获取关于 Ktor 认证与授权的一般信息。

添加依赖项

要启用 LDAP 认证,你需要在构建脚本中包含 ktor-server-authktor-server-auth-ldap 构件:

Kotlin
Groovy
XML

配置 LDAP

步骤 1: 选择一个认证提供者

要认证 LDAP 用户,你首先需要选择一个用于用户名和密码验证的认证提供者。在 Ktor 中,可以使用基本摘要基于表单的提供者。例如,要使用 basic 认证提供者,请在 install 代码块内调用 basic 函数。

kotlin
import io.ktor.server.application.*
import io.ktor.server.auth.*
import io.ktor.server.auth.ldap.*
//...
install(Authentication) {
    basic {
        validate { credentials ->
            // 认证 LDAP 用户
        }
    }
}

validate 函数将用于检测用户凭证。

步骤 2: 认证 LDAP 用户

要认证 LDAP 用户,你需要调用 ldapAuthenticate 函数。此函数接受 UserPasswordCredential,并根据指定的 LDAP 服务器对其进行验证。

kotlin
install(Authentication) {
    basic("auth-ldap") {
        validate { credentials ->
            ldapAuthenticate(credentials, "ldap://0.0.0.0:389", "cn=%s,dc=ktor,dc=io")
        }
    }
}

validate 函数在认证成功时返回一个 UserIdPrincipal,如果认证失败则返回 null

可选地,你可以为已认证用户添加额外的验证。

kotlin
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,并获取已认证用户的名称。

kotlin
routing {
    authenticate("auth-ldap") {
        get("/") {
            call.respondText("Hello, ${call.principal<UserIdPrincipal>()?.name}!")
        }
    }
}

你可以在此处找到完整的可运行示例:auth-ldap

请注意,当前的 LDAP 实现是同步的。