【发布时间】:2018-11-02 05:38:59
【问题描述】:
我正在尝试通过 spring ldap 对用户进行身份验证。以下是初始化ldap模板的代码。
contextSource = new LdapContextSource();
contextSource.setUrl("ldaps://ldap.example.com");
contextSource.setBase("DC=example,DC=com");
contextSource.setUserDn("backend-app");
contextSource.setPassword("password");
contextSource.afterPropertiesSet();
PoolingContextSource pooledContextSource = new PoolingContextSource();
pooledContextSource.setDirContextValidator(new
DefaultDirContextValidator());
pooledContextSource.setContextSource(contextSource);
ldapTemplate = new LdapTemplate(pooledContextSource);
ldapTemplate.afterPropertiesSet();
当我尝试使用 ldapTemplate 验证方法时,它返回 false。
// below line fails
ldapTemplate.authenticate("OU=Service Accounts,OU=Pseudo-Users", "frontend-web", "password");
但是当我使用目录上下文时它可以工作
DirContext ctx = null;
try {
ctx = contextSource.getContext("frontend-web", "password");
return true;
} catch (Exception e) {
logger.error("Login failed", e);
return false;
} finally {
LdapUtils.closeContext(ctx);
}
问题 1: 有没有办法让 ldaptemplate 验证方法起作用?
问题2:为什么直接使用DirectoryContext时不用提供baseDn。 ldap 如何知道在哪里可以找到用户“frontend-web”。它是否在整个目录中搜索用户“frontend-web”
谁能帮忙。
【问题讨论】:
标签: java ldap jndi spring-ldap