LDAP 経由の認証を可能にする Java Web アプリケーションがあります。基本的には、次のプロセスに従います。
- ディレクトリを検索する権限を持つ管理者ユーザーで、ディレクトリにバインドします。
- ユーザー名/値を取得し、ディレクトリを検索して、特定の属性にそのユーザー名/値を持つユーザーを探します。
- 入力したパスワードで見つかったユーザーとバインドします。
- バインドが成功すると、ログインが許可されます。
これはうまく機能しますが、最近、ログインしている LDAP ユーザーがディレクトリ自体を参照するためのアクセス権を持っていない環境に遭遇しました。これにより、バインド時にエラーが発生します。(admin ユーザーは正しくバインドし、ディレクトリを検索します。失敗するのは、見つかったユーザーとの最後のバインドのみです)。
LDAP ディレクトリ (CA ディレクトリ) からの内部ログは、バインド機能が成功したことを示していますが、バインド プロセスの一部として、バインドされたユーザーは自分自身を検索しています..これを行うためのアクセス権がありません。これにより、バインドが失敗します。
LDAP へのバインドは、この Java コードで行われます。
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
props.put(Context.PROVIDER_URL, createLDAPString());
props.put(Context.SECURITY_AUTHENTICATION, "simple");
props.put(Context.SECURITY_PRINCIPAL, username);
props.put(Context.SECURITY_CREDENTIALS, password);
return new InitialLdapContext(props, null);
内部参照の発生を停止する方法はありますか?
または、バインドせずにユーザー/パスワードを検証できる方法はありますか? すなわち。別のユーザーに代わってバインドするか、パスワードを手動で比較します (これはあまり良くありません)。
ありがとう。