Skip to content

LDAP

必要な依存関係: io.ktor:ktor-server-auth, io.ktor:ktor-server-auth-ldap

コード例: auth-ldap

ネイティブサーバー
KtorはKotlin/Nativeをサポートしており、追加のランタイムや仮想マシンなしでサーバーを実行できます。
のサポート: ✖️

LDAPは、ユーザーに関する情報を格納できるさまざまなディレクトリサービスと連携するためのプロトコルです。Ktorを使用すると、basicdigest、またはフォームベースの認証スキームを使用してLDAPユーザーを認証できます。

Ktorにおける認証と認可に関する一般的な情報は、Ktorサーバーの認証と認可セクションで確認できます。

依存関係の追加

LDAP認証を有効にするには、ktor-server-authおよびktor-server-auth-ldapアーティファクトをビルドスクリプトに含める必要があります。

Kotlin
Groovy
XML

LDAPの設定

ステップ1: 認証プロバイダーの選択

LDAPユーザーを認証するには、まずユーザー名とパスワードの検証に使用する認証プロバイダーを選択する必要があります。Ktorでは、これにbasicdigest、またはフォームベースのプロバイダーを使用できます。例えば、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 ->
            // Authenticate an LDAP user
        }
    }
}

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実装は同期処理であることに注意してください。