Skip to content

LDAP

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

代码示例 auth-ldap

原生服务器
Ktor supports Kotlin/Native and allows you to run a server without an additional runtime or virtual machine.
支持:✖️

LDAP 是一种用于处理各种存储用户信息的目录服务的协议。Ktor 允许您使用 基本 (basic)、摘要 (digest) 或 基于表单 (form-based) 的身份验证架构来验证 LDAP 用户。

您可以在 Ktor Server 中的身份验证与授权 章节中获取有关 Ktor 身份验证与授权的常规信息。

添加依赖项

要启用 LDAP 身份验证,您需要在构建脚本中包含 ktor-server-authktor-server-auth-ldap 构件:

Kotlin
Groovy
XML

配置 LDAP

步骤 1:选择身份验证提供者

要验证 LDAP 用户,您首先需要为用户名和密码验证选择一个身份验证提供者。在 Ktor 中,基本 (basic)、摘要 (digest) 或 基于表单 (form-based) 提供者均可用于此目的。例如,要使用 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 实现是同步的。