使用 Spring LDAP 在 Java 中进行身份验证
Posted
技术标签:
【中文标题】使用 Spring LDAP 在 Java 中进行身份验证【英文标题】:Authentication in Java using Spring LDAP 【发布时间】:2015-10-30 13:52:03 【问题描述】:我正在尝试从 Spring LDAP 项目连接到 AD
我没有从 DefaultSpringSecurityContextSource
中找到任何方法来设置 CN 进行身份验证。
public void init(AuthenticationManagerBuilder auth) throws Exception
DefaultSpringSecurityContextSource context = new DefaultSpringSecurityContextSource("ldaps://test.ldaps.com/DC=test,DC=ldaps,DC=com");
context.setPassword("password");
context.afterPropertiesSet();
auth
.ldapAuthentication()
.userSearchFilter("(|(objectClass=person)(objectClass=user))")
.userDnPatterns("uid=0,OU=people)")
.contextSource(context);
我没有找到像contect.setUserCN()
这样的方法。
【问题讨论】:
你试过LdapTemplate
吗?
不仅有spring ldap项目spring.io/guides/gs/authenticating-ldap
我不想使用任何 xml 文件进行设置
【参考方案1】:
应该不需要设置 CN。您只需在上下文中指定一个 managerDN 和 managerPass,如下所示。然后,Security Ldap 将使用上下文来查找符合当时条件的用户,检索其 DN,然后尝试使用检索到的 DN 和给定的通行证发出绑定。
这是我们运行良好的配置:
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter
@Autowired
private SecurityConfigProperties conf;
@Autowired
public void configureGlobal(AuthenticationManagerBuilder authBuilder) throws Exception
authBuilder
.ldapAuthentication()
.userSearchFilter("(sAMAccountName=0)")
.userSearchBase("dc=XXXX,dc=XXXXXX,dc=XXX")
.groupSearchBase("ou=XXXXXXX,dc=XXXX,dc=XXXXXX,dc=XXX")
.groupSearchFilter("member=0")
.contextSource()
.url(conf.getLdapUrl())
.port(conf.getLdapPort())
.managerDn(conf.getBindCn())
.managerPassword(conf.getBindPass());
但是按照您的代码示例context.setUserDN()
应该是您正在寻找的。p>
【讨论】:
感谢您的回答!但是 SecurityConfigProperties 的导入是什么?或者我在哪个 spring 包中找到它? 这只是我们创建的一个类,用于使用@ConfigurationProperties(prefix = "ldap") public class SecurityConfigProperties
自动从配置文件中捕获一些属性
完美!如果您接受此答案作为解决方案,那就太好了。
您能解释一下参数 (sAMAccountName=0) 和 member=0 的作用吗?
0
是传递的第一个参数的占位符,即用户名。同样适用于member
。以上是关于使用 Spring LDAP 在 Java 中进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security - 在Spring Boot中针对LDAP使用Active Directory对用户进行身份验证
使用服务帐户对 LDAP 目录进行 Spring-Authentication
LDAP - 无法使用spring java ldap api启用用户