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