问题:Grails ADMIN通过LDAP登录,但没有其他帐户登录 . System = Win 7,grails 2.2.1,Active Dir轻量级
我创建了一个简单的grails默认应用程序,安装了最新的grails spring security和ldap插件 . 然后,我按照以下教程配置 spring 安全设置 . 教程位于http://blog.springsource.com/2010/08/11/simplified-spring-security-with-grails/
无论如何, spring 安全工作相当快,下一步是设置LDAP以使用anonymousAuthenticationProvider,这样我的grails应用程序将登录而不检查自己的数据库是否有密码,只有LDAP . 我正在使用Windows Active Directory . 无论如何,遵循此配置设置http://grails-plugins.github.io/grails-spring-security-ldap/docs/manual/guide/2.%20Usage.html . 所有似乎都开始正常,除了似乎正确登录的唯一用户是管理员,没有其他用户工作 . 我找不到具有该用户名/密码错误的用户 . 我为spring安全添加了错误,警告和信息日志输出,但似乎没有提供太多信息,除了实际工作的管理员帐户 . 我验证它是有效的,因为我给了 spring 安全db密码一个不同的密码到ldap密码,一旦配置了ldap,唯一适用于admin的密码就是ldap密码 . 不幸的是没有其他用户工作 .
这是我的grails配置:
// Added by the Spring Security Core plugin:
grails.plugins.springsecurity.userLookup.userDomainClassName = 'org.example.SecUser'
grails.plugins.springsecurity.userLookup.authorityJoinClassName = 'org.example.SecUserSecRole'
grails.plugins.springsecurity.authority.className = 'org.example.SecRole'
grails.plugins.springsecurity.ldap.context.managerDn = 'CN=admin,OU=people,OU=imApp,DC=example,DC=org'
grails.plugins.springsecurity.ldap.context.managerPassword = 'password'
grails.plugins.springsecurity.ldap.context.server = 'ldap://localhost:55000/'
grails.plugins.springsecurity.ldap.authorities.ignorePartialResultException = true
grails.plugins.springsecurity.ldap.search.base = 'OU=people,OU=imApp,DC=example,DC=org'
grails.plugins.springsecurity.ldap.search.filter='uid={0}' //ad use sAMAccountName instead of uid
grails.plugins.springsecurity.ldap.search.searchSubtree =true
grails.plugins.springsecurity.ldap.auth.hideUserNotFoundExceptions= false
grails.plugins.springsecurity.ldap.search.derefLink = true
// specify this when you want to skip attempting to load from db and only use LDAP
grails.plugins.springsecurity.providerNames = ['ldapAuthProvider', 'anonymousAuthenticationProvider']
grails.plugins.springsecurity.conf.ldap.authorities.retrieveGroupRoles = false
grails.plugins.springsecurity.conf.ldap.authorities.retrieveDatabaseRoles = false
//grails.plugins.springsecurity.ldap.authorities.groupSearchBase = 'ou=groups,ou=imApp,dc=mcommunity,dc=org'
//role specific ldap config
grails.plugins.springsecurity.ldap.useRememberMe = false
我已经尝试了这个配置的一些变体,例如它说Active Dir需要sAMAccountName作为search.filter但是当我使用这个没有帐户工作时,如果我完全注释掉它的工作原理已经记忆,管理员登录但没有其他帐户呢 . 如果我删除springsecurity.providerNames应用程序启动但使用DB作为密码身份验证提供程序 . 我遇到了一些博客,提到删除模型类和数据库的密码,或者使其无效,我尝试但对结果没有影响 .
我的Active Dir结构如下:
DC=example,dc=org
OU=imApp
OU=groups
OU=people
CN=admin user CN=admin,OU=people,OU=imApp,DC=example,DC=org
CN=user1 user CN=user1,OU=people,OU=imApp,DC=example,DC=org
CN=LostAndFound
CN= NTDS Quotas
CN=Roles
我给每个帐户一个LDAP密码,并添加了一个与其用户名(CN)匹配的参数uid . 我没有使用Custom UserDetailsContextMapper,只是默认 . 但是,我确实尝试了一个Custom UserDetailsContextMapper并且遇到了同样的问题,因此恢复使用标准版 . 另外我注意到Active Dir对于org有一个小写dc,所以我尝试在Grails配置中使用相同的小写dc,但结果相同 .
有没有人遇到这个问题或知道我可能会去哪里?任何帮助赞赏 .
最好的,Marklw16
1 回答
试试这些设置: