繁体   English   中英

Spring LDAP 身份验证 NO_OBJECT

[英]Spring LDAP authentication NO_OBJECT

我正在尝试将 Spring 应用程序连接到 AD-LDAP 服务器。 如果我输入正确的用户/密码,我会在日志中收到NO_OBJECT

DEBUG o.s.s.l.s.FilterBasedLdapUserSearch - Searching for user 'THEUSER', with user search [ searchFilter: '(sAMAccountName={0})', searchBase: 'DC=dev,DC=company,DC=local', scope: subtree, searchTimeLimit: 0, derefLinkFlag: false ]
DEBUG o.s.s.l.SpringSecurityLdapTemplate - Searching for entry under DN '', base = 'dc=entwicklung,dc=Lemken,dc=local', filter = '(sAMAccountName={0})'
DEBUG o.s.s.l.SpringSecurityLdapTemplate - Found DN: CN=THEUSER\, FirstName,OU=users,DC=dev,DC=company,DC=local
DEBUG o.s.s.l.a.BindAuthenticator - Attempting to bind as cn=THEUSER\, FirstName,ou=users,dc=dev,dc=company,dc=local
DEBUG o.s.s.l.DefaultSpringSecurityContextSource - Removing pooling flag for user cn=THEUSER\, FirstName,ou=users,dc=dev,dc=company,dc=local
DEBUG o.s.s.l.u.DefaultLdapAuthoritiesPopulator - Getting authorities for user cn=THEUSER\, FirstName,ou=users,dc=dev,dc=company,dc=local
DEBUG o.s.s.l.u.DefaultLdapAuthoritiesPopulator - Searching for roles for user 'THEUSER', DN = 'cn=THEUSER\, FirstName,ou=users,dc=dev,dc=company,dc=local', with filter (uniqueMember={0}) in search base ''
DEBUG o.s.s.l.SpringSecurityLdapTemplate - Using filter: (uniqueMember=cn=THEUSER\5c, FirstName,ou=users,dc=dev,dc=company,dc=local)
ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception
org.springframework.ldap.NameNotFoundException: [LDAP: error code 32 - 0000208D: NameErr: DSID-03100213, problem 2001 (NO_OBJECT), data 0, best match of:
    ''

这是我的配置:

ContextSourceBuilder context = auth.ldapAuthentication()
  .userSearchFilter("(sAMAccountName={0})")
  .userSearchBase("dc=dev,dc=company,dc=local")
  .contextSource();

context.port(389);
context
  .root("dc=dev,dc=company,dc=local")
  .url("ldap://example.com")
  .managerDn("cn=manager,ou=users,dc=dev,dc=company,dc=local")
  .managerPassword("thepassword");

如果我输入了错误的密码,我会得到“密码错误”,所以这部分有效。

我究竟做错了什么?

关键部分是:

Searching for roles
...
Using filter: (uniqueMember=

它试图找到用户的角色 - 在 AD 中,这些是用户所属的组。 但它是通过搜索将uniqueMember属性设置为用户的组来实现的。 该属性在 AD 中不存在。 这是它使用的默认属性名称,因为这是 OpenLDAP 中使用的名称。

您将需要使用groupSearchFilter()更改它查看的属性以查找组。 AD 使用member属性。

ContextSourceBuilder context = auth.ldapAuthentication()
  .userSearchFilter("(sAMAccountName={0})")
  .userSearchBase("dc=dev,dc=company,dc=local")
  .groupSearchFilter("(member={0})")
  .contextSource();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM