LDAP
所需依賴: io.ktor:ktor-server-auth
, io.ktor:ktor-server-auth-ldap
程式碼範例: auth-ldap
LDAP 是一種用於處理各種目錄服務的協定,這些服務可以儲存使用者資訊。Ktor 允許您使用 basic、digest 或 form-based 驗證方案來驗證 LDAP 使用者。
您可以在 Ktor 伺服器中的驗證與授權章節中取得關於 Ktor 中驗證和授權的一般資訊。
新增依賴項
若要啟用 LDAP
驗證,您需要在建構指令稿 (build script) 中包含 ktor-server-auth
和 ktor-server-auth-ldap
構件 (artifact):
設定 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
函數在路由處理器 (route handler) 內部擷取 (retrieve) 已驗證的 UserIdPrincipal,並取得已驗證使用者的名稱。
routing {
authenticate("auth-ldap") {
get("/") {
call.respondText("Hello, ${call.principal<UserIdPrincipal>()?.name}!")
}
}
}
您可以在此處找到完整的可執行範例:auth-ldap。
請注意,目前的 LDAP 實作是同步的。