ISSUE: Grails ADMIN 通过 LDAP 登录,但没有其他帐户登录。系统 = 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 security 工作得相当快,下一步是设置 LDAP 以使用anonymousAuthenticationProvider,这样我的 grails 应用程序就可以登录而无需检查其自己的数据库中的密码,只检查 LDAP。我正在使用 Windows 活动目录。无论如何,按照这个配置设置http://grails-plugins.github.io/grails-spring-security-ldap/docs/manual/guide/2.%20Usage.html. 一切似乎都开始正常,除了似乎正确登录的唯一用户是管理员,没有其他用户工作。我得到一个找不到用户名/密码错误的用户。我为 Spring Security 添加了错误、警告和信息日志输出,但除了实际有效的管理员帐户外,似乎根本没有提供太多信息。我验证了它的工作原理,因为我为 spring security db 密码提供了与 ldap 密码不同的密码,并且一旦配置了 ldap,唯一适用于管理员的密码就是 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。我没有使用自定义 UserDetailsContextMapper,只是默认的。但是,我确实尝试了自定义 UserDetailsContextMapper 并且遇到了同样的问题,因此恢复为仅使用标准。我还注意到 Active Dir 对 org 有一个小写的 dc,所以我尝试在 Grails 配置中使用相同的小写 dc,但结果相同。
有没有人遇到过这个问题或知道我可能会去哪里?任何帮助表示赞赏。
最好的,Marklw16