我们有一个 Java Web 应用程序,允许通过 LDAP 进行身份验证。 基本上,它遵循以下过程:
- 使用有权搜索目录的管理员用户绑定(bind)到目录。
- 获取用户名/值并在目录中搜索在特定属性中具有该用户名/值的用户。
- 与通过输入的密码找到的用户绑定(bind)。
- 如果绑定(bind)成功,我们将授予登录权限。
这很有效,但我们最近遇到了 LDAP 用户登录后无权浏览目录本身的环境。这会导致绑定(bind)时出错。 (admin用户绑定(bind)正确,并搜索目录。只有与找到的用户的最终绑定(bind)失败)。
来自 LDAP 目录(CA 目录)的内部日志记录显示绑定(bind)功能成功,但作为绑定(bind)过程的一部分,绑定(bind)用户正在自行查找......它无权执行此操作。这会导致绑定(bind)失败。
与 LDAP 的绑定(bind)是使用此 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);
有没有办法阻止内部查找的发生?
或者有没有办法可以在不绑定(bind)的情况下验证用户/密码? IE。代表另一个用户进行绑定(bind)..或手动比较密码(这听起来不太好)。
谢谢。
最佳答案
目录设置不正确。用户应该能够阅读他自己的条目。
关于java - LDAP用户无权浏览目录时如何绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19850659/