我正在尝试让 Grails LDAP 插件与我的 Active Directory 一起工作。
该插件需要很多我不太熟悉的东西,因为我对 Active Directory 了解不多。
以下是该插件所需的内容:
// LDAP config
grails.plugins.springsecurity.ldap.context.managerDn = '[distinguishedName]'
grails.plugins.springsecurity.ldap.context.managerPassword = '[password]'
grails.plugins.springsecurity.ldap.context.server = 'ldap://[ip]:[port]/'
grails.plugins.springsecurity.ldap.authorities.ignorePartialResultException = true // typically needed for Active Directory
grails.plugins.springsecurity.ldap.search.base = '[the base directory to start the search. usually something like dc=mycompany,dc=com]'
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
grails.plugins.springsecurity.ldap.search.attributesToReturn = ['mail', 'displayName'] // extra attributes you want returned; see below for custom classes that access this data
grails.plugins.springsecurity.providerNames = ['ldapAuthProvider', 'anonymousAuthenticationProvider'] // specify this when you want to skip attempting to load from db and only use LDAP
// role-specific LDAP config
grails.plugins.springsecurity.ldap.useRememberMe = false
grails.plugins.springsecurity.ldap.authorities.retrieveGroupRoles = true
grails.plugins.springsecurity.ldap.authorities.groupSearchBase ='[the base directory to start the search. usually something like dc=mycompany,dc=com]'
// If you don't want to support group membership recursion (groups in groups), then use the following setting
// grails.plugins.springsecurity.ldap.authorities.groupSearchFilter = 'member={0}' // Active Directory specific
// If you wish to support groups with group as members (recursive groups), use the following
grails.plugins.springsecurity.ldap.authorities.groupSearchFilter = '(member:1.2.840.113556.1.4.1941:={0})' // Active Directory specific
我正在使用 Windows 2008 Server 并且了解以下内容:
IP = 10.10.10.90
Name = bold.foo.bar (This is what I see under Active Directory Users and Computers)
Domain =`BOLD`
Group = `MANAGERS`
Users = USERA (part of MANAGERS group) and USERB (not part of MANAGERS group)
问题
我可以得到一些关于填写部分/大部分所需配置的帮助吗?我可以访问服务器管理器中的 Active Directory 域服务,因此如果大部分信息都来自那里,我就可以得到它。
附言:我没有系统管理员帮我处理这件事。所以我只能担任这两个角色的开发人员 :)
答案1
活动目录浏览器 (AdExplorer)来自 Microsoft 的实用程序Windows 系统内部suite 可以帮助您找到DN和搜索库您需要的信息。
但最好了解一些 LDAP 概念以获得更多控制权,例如,你想添加更多search.filter
或者在搜索结果中获取更多属性(search.attributesToReturn
)(您也想获取用户的电话号码)。有用的链接:
答案2
到目前为止,grails 和 AD 最重要的一点是使用 ActiveDirectoryLdapAuthenticationProvider 而不是 LdapAuthenticationProvider,因为它可以省去很多麻烦。然后您只需几行代码即可设置 AD 身份验证:
在 resources.groovy 中:
// Domain 1
ldapAuthProvider1(ActiveDirectoryLdapAuthenticationProvider,
"mydomain.com",
"ldap://mydomain.com/"
)
// Domain 2
ldapAuthProvider2(ActiveDirectoryLdapAuthenticationProvider,
"mydomain2.com",
"ldap://mydomain2.com/"
)
在 Config.groovy 中:
grails.plugin.springsecurity.providerNames = ['ldapAuthProvider1', 'ldapAuthProvider2']
这是您需要的所有代码。您几乎可以删除 Config.groovy 中的所有其他 grails.plugin.springsecurity.ldap.* 设置,因为它们不适用于此 AD 设置。