1

我正在使用 LDAP 进行身份验证,并且对于特定域中的用户来说一切正常。但是我很难理解如何对第二个域下的用户进行身份验证。下面显示的当前配置指定了用户搜索库中的第一个域。我删除了该参数,希望它能搜索所有域,但这不起作用。我还尝试在出现提示时将域指定为用户名的一部分,例如域\用户,但这也不起作用。

<security:authentication-manager alias="authenticationManager">
         <security:ldap-authentication-provider 
          user-search-filter="(samaccountname={0})" 
          user-search-base="dc=domain,dc=company,dc=com"
          user-context-mapper-ref="userContextMapper" >
        </security:ldap-authentication-provider>
</security:authentication-manager>

<security:ldap-server 
    url="ldap://some.url.com:3000" 
    manager-dn="CN=USER1,OU=FacMgr,OU=FAC,OU=Exchange,dc=domain,dc=company,dc=com" 
    manager-password="xxxx"/>

我是否需要创建自定义搜索,如果需要,有人可以在这种情况下提供示例吗?

4

2 回答 2

0

看起来好像您正在使用 Active Directory,在这种情况下,我想知道您为什么不使用更基本的 ActiveDirectoryLdapAuthenticationProvider 类。

无论如何,您应该能够通过扩展 LdapAuthenticationProvider 或 ActiveDirectoryLdapAuthenticationProvider 并将适当的域传递给超类的方法来完成所需的工作。

创建一个接受两个不同 LdapAuthenticator 对象的构造函数,并在doAuthentication方法的语句中添加第二个“try”catch (UsernameNotFoundException notFound)语句(在检查错误凭据之后)。getAuthenticator如果第一个身份验证器失败,请使用您喜欢的任何方法来尝试第二个身份验证器。

这种方法应该可行,但是如果两个域的用户名都是jsmith,但有问题的用户驻留在第二个域上,您可能会遇到问题——也就是说,这不是一个特别好的解决方案,但它一个解决方案。

要正确构建这一切,请使用自定义身份验证过滤器(扩展 UsernamePasswordAuthenticationFilter),并让该LdapAuthenticationProvider.getAuthenticator()方法根据过滤器传递的值(在您的自定义登录表单中)识别域。

您可能需要不同的经理帐户,但希望这足以让您继续。

于 2013-04-29T20:27:39.360 回答
0

完成这项工作的诀窍是使用 ActiveDirectoryLdapAuthenticationProvider。为此,只需进行以下更改:

在 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 设置。

文档: http ://docs.spring.io/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#ldap-active-directory

于 2014-10-17T13:24:16.647 回答