LDAP
必須の依存関係: io.ktor:ktor-server-auth, io.ktor:ktor-server-auth-ldap
コード例: auth-ldap
LDAPは、ユーザーに関する情報を保存できるさまざまなディレクトリサービスを操作するためのプロトコルです。Ktorでは、ベーシック、ダイジェスト、またはフォームベースの認証スキームを使用してLDAPユーザーを認証できます。
Ktorにおける認証と認可に関する一般的な情報は、Ktorサーバーにおける認証と認可セクションで確認できます。
依存関係の追加
LDAP認証を有効にするには、ビルドスクリプトにktor-server-authとktor-server-auth-ldapアーティファクトを含める必要があります。
LDAPの構成
ステップ1:認証プロバイダーの選択
LDAPユーザーを認証するには、まずユーザー名とパスワードを検証するための認証プロバイダーを選択する必要があります。Ktorでは、ベーシック、ダイジェスト、またはフォームベースのプロバイダーをこれに使用できます。例えば、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)であることに注意してください。
