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