LDAP
所需依赖项:io.ktor:ktor-server-auth, io.ktor:ktor-server-auth-ldap
代码示例: auth-ldap
LDAP 是一种用于处理各种存储用户信息的目录服务的协议。Ktor 允许您使用 基本 (basic)、摘要 (digest) 或 基于表单 (form-based) 的身份验证架构来验证 LDAP 用户。
您可以在 Ktor Server 中的身份验证与授权 章节中获取有关 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 函数将用于检查用户凭据。
步骤 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 实现是同步的。
