Grails Spring Security LDAP间歇性身份验证失败

时间:2015-04-13 18:01:36

标签: grails spring-security-ldap

我们有一个已在Tomcat 7下部署了一年多的应用程序,并且在最近升级开放式LDAP服务器之前一直工作。自升级以来,我们有间歇性登录失败。会有一连串的成功,与失败交替出现。 LDAP服务器管理员在应用程序服务器和LDAP服务器之间放置了一个数据包嗅探器,并确定存在两个不同的数据包签名。他认为应用程序必须发送这两个不同的登录,但代码没有改变,应用程序服务器也没有改变。

我们正在使用:

  • Grails 2.2.2
  • springSecurityCore 1.2.7.3
  • springSecurityLdap 1.0.6

以下是他的报道:

Successful:
[09/Apr/2015:14:21:18 -0400] conn=17363 fd=64 slot=64 connection from 172.18.4.34 to 172.18.4.24
[09/Apr/2015:14:21:18 -0400] conn=17363 op=0 BIND dn="cn=hamerm,cn=Users,dc=lcc,dc=edu" method=128 version=3
[09/Apr/2015:14:21:18 -0400] conn=17363 op=0 RESULT err=0 tag=97 nentries=0 etime=0 dn="cn=hamerm,cn=users,dc=lcc,dc=edu"
[09/Apr/2015:14:21:18 -0400] conn=17363 op=1 SRCH base="cn=hamerm,cn=Users,dc=lcc,dc=edu" scope=0 filter="(objectClass=*)" attrs="mail cn sn givenName"
[09/Apr/2015:14:21:18 -0400] conn=17363 op=1 RESULT err=0 tag=101 nentries=0 etime=0
[09/Apr/2015:14:21:18 -0400] conn=17363 op=2 UNBIND

Unsuccessful:
[09/Apr/2015:14:19:17 -0400] conn=13546 fd=71 slot=71 connection from 172.18.4.34 to 172.18.4.23
[09/Apr/2015:14:19:17 -0400] conn=13546 op=0 BIND dn="" method=128 version=3
[09/Apr/2015:14:19:17 -0400] conn=13546 op=0 RESULT err=0 tag=97 nentries=0 etime=0 dn=""
[09/Apr/2015:14:19:17 -0400] conn=13546 op=1 SRCH base="cn=users,dc=lcc,dc=edu" scope=2 filter="(&(objectClass=*)(uid=hamerm))" attrs=ALL
[09/Apr/2015:14:19:17 -0400] conn=13546 op=1 RESULT err=0 tag=101 nentries=1 etime=0 notes=U
[09/Apr/2015:14:19:17 -0400] conn=13546 op=2 BIND dn="cn=hamerm,cn=Users,dc=lcc,dc=edu" method=128 version=3
[09/Apr/2015:14:19:17 -0400] conn=13546 op=2 RESULT err=0 tag=97 nentries=0 etime=0 dn="cn=hamerm,cn=users,dc=lcc,dc=edu"
[09/Apr/2015:14:20:22 -0400] conn=13546 op=-1 fd=71 closed - B1

请注意,这是来自同一个应用程序和同一服务器,使用相同的URL登录。

我们都无法找到两种不同类型的数据包产生的位置。我需要让它只发送成功的LDAP查询。

以下是Config.groovy的相关部分:

grails.plugins.springsecurity.providerNames = ['ldapAuthProvider','anonymousAuthenticationProvider','rememberMeAuthenticationProvider']
// we will be using anonymous bind
//grails.plugins.springsecurity.ldap.context.managerDn = 'uid=admin,ou=system'
//grails.plugins.springsecurity.ldap.context.managerPassword = 'YOUR_PASSWORD'
grails.plugins.springsecurity.ldap.context.managerDn = ''
grails.plugins.springsecurity.ldap.context.managerPassword = ''
grails.plugins.springsecurity.ldap.context.server = 'ldap://myserver.lcc.edu:389'
grails.plugins.springsecurity.ldap.authorities.groupSearchBase = 'ou=Groups,dc=lcc,dc=edu'
// at this time, we do not need group information
grails.plugins.springsecurity.ldap.authorities.retrieveGroupRoles = false
grails.plugins.springsecurity.ldap.authorities.retrieveDatabaseRoles = false
grails.plugins.springsecurity.ldap.authorities.groupSearchFilter = 'member={0}'
// necessary for Active Directory
//grails.plugins.springsecurity.ldap.authorities.ignorePartialResultException = true
//grails.plugins.springsecurity.ldap.search.filter="sAMAccountName={0}" //for active directory you need this
grails.plugins.springsecurity.ldap.search.searchSubtree = true 
grails.plugins.springsecurity.ldap.auth.hideUserNotFoundExceptions= false// our DN string: cn=%LDAP_USER%,cn=Users,dc=lcc,dc=edu
//grails.plugins.springsecurity.ldap.search.base = 'dc=example,dc=com'
grails.plugins.springsecurity.ldap.search.base = 'cn=Users,dc=lcc,dc=edu'
//grails.plugins.springsecurity.ldap.search.attributesToReturn = ['mail', 'cn', 'sn', 'givenName']
//grails.plugins.springsecurity.ldap.authenticator.attributesToReturn = ['mail', 'cn', 'sn', 'givenName']

LDAP管理员进一步说,如果我们可以将发送的请求与我们的ApEx应用程序发送的请求相同,那么一切都会好的。该数据包模式如下:

[10/Apr/2015:11:07:54 -0400] conn=67850 fd=69 slot=69 connection from 172.18.4.34 to 172.18.4.24
[10/Apr/2015:11:07:54 -0400] conn=67850 op=0 BIND dn="cn=LEESA,cn=Users,dc=lcc,dc=edu" method=128 version=3
[10/Apr/2015:11:07:54 -0400] conn=67850 op=0 RESULT err=0 tag=97 nentries=0 etime=0 dn="cn=leesa,cn=users,dc=lcc,dc=edu"
[10/Apr/2015:11:07:54 -0400] conn=67850 op=1 UNBIND
[10/Apr/2015:11:07:54 -0400] conn=67850 op=1 fd=69 closed - U1

应该对Config.groovy和/或其他配置文件做些什么来产生良好的模式?或者,如果配置似乎没有任何问题,可能导致这种情况?

0 个答案:

没有答案