我无法使用真实的的Active Directory进行身份验证,让我更好地解释一下我尝试使用www.example.com建议的示例进行身份验证spring.io没有任何问题,其中启动了内部服务,没有任何问题。参考https://spring.io/guides/gs/authenticating-ldap/
我试图通过插入我的活动目录的配置来修改下面的代码,但没有成功。您能指导我吗?或者给我一个真实的案例,在不使用内部服务的情况下建立真正的连接,就像例子中的那些吗?我在网上看了看,但发现所有的东西都和官方的例子相似,没有任何真实的案例
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.ldapAuthentication()
.userDnPatterns("uid={0},ou=people")
.groupSearchBase("ou=groups")
.contextSource()
.url("ldap://localhost:8389/dc=springframework,dc=org")
.and()
.passwordCompare()
.passwordEncoder(new LdapShaPasswordEncoder())
.passwordAttribute("userPassword");
}
错误显示:LDAP处理过程中出现未分类的异常;嵌套的异常是javax.naming.NamingException:[LDAP:错误代码1 - 000004 DC:登录错误:DSID-0 C 0907 C2,备注:要执行此操作,必须在连接上成功完成绑定。,data 0,v2580
2条答案
按热度按时间wvt8vs2t1#
是的,通过LDAP进行身份验证太麻烦了。为了能够对AD执行身份验证,您需要使用ActiveDirectoryLdapAuthenticationProvider。以下是工作示例:
为了保存您的时间,请阅读以下内容,这一点非常重要:AD身份验证文档
bfnvny8b2#
我在这里找到了一个样本,很有用:
https://github.com/sachin-awati/Mojito/tree/master/webapp/src/main/java/com/box/l10n/mojito/security
如果在Active Directory查找
loadUserByUsername
期间找不到用户,可以选择实现UserDetailsContextMapperImpl
,它将覆盖mapUserFromContext
以创建UserDetails
对象。确保您使用的是
ActiveDirectoryLdapAuthenticationProvider
spring安全类,因为Active Directory与其他LDAP服务器相比有其自身的细微差别。您可能需要在安全配置类中使用@EnableGlobalAuthentication
注解,因为您可能有多个AuthenticationManagerBuilder
,这会使事情变得非常混乱。更多详细信息,请访问:https://github.com/spring-projects/spring-security/issues/4324https://github.com/spring-projects/spring-security/issues/4571