Tomcat 7中的LDAP身份验证,如何在server.xml中绑定LDAP?

时间:2014-05-09 09:40:49

标签: java tomcat authentication ldap jndi

我正在尝试使用 Tomcat 7 获取 LDAP身份验证

我在server.xml

中有以下配置
     <Context path="/WebApp" reloadable="false" docBase="E:\ESS\Tomcat 7\webapps\WebApp">
          <ResourceLink name="mail/WebAPPMS" type="javax.mail.Session" global="mail_Session"/>
          <Manager checkInterval="60" debug="99"/>
          <ResourceLink name="jdbc/WebAppDS" type="javax.sql.DataSource" global="WebAppDataSource"/>
                  <Realm className="org.apache.catalina.realm.JNDIRealm" debug="99" connectionURL="ldap://company.com:3268" userBase="DC=company,DC=com" userSubtree="true" userSearch="(CN={0})"/>
          <ResourceLink name="directory/WebAppReports" type="java.lang.String" global="SchemaReportsDirectory"/>
    </Context>

现在在我们的 LDAP 中,不允许使用匿名绑定。所以我需要在搜索和验证之前绑定。

但是,我无法通过connectionNameconnectionPassworduserPassword,因为它会在Comparison mode中创建身份验证, LDAP

使用上面的配置我收到以下错误:

  

2014年5月8日下午1:25:44 org.apache.catalina.realm.JNDIRealm   验证SEVERE:执行身份验证的异常   javax.naming.NamingException:[LDAP:错误代码1 - 00000000:LdapErr:   DSID-0C090627,评论:为了执行此操作a   必须在连接上完成成功绑定。,data 0,vece];   剩下的名字'DC =公司,DC = com'at   com.sun.jndi.ldap.LdapCtx.mapErrorCode(未知来源)at   com.sun.jndi.ldap.LdapCtx.processReturnCode(未知来源)at at   com.sun.jndi.ldap.LdapCtx.processReturnCode(未知来源)at at   com.sun.jndi.ldap.LdapCtx.searchAux(未知来源)at   com.sun.jndi.ldap.LdapCtx.c_search(未知来源)at   com.sun.jndi.toolkit.ctx.ComponentDirContext.p_search(未知来源)     在com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(未知   来源)at   com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(未知   来自)javax.naming.directory.InitialDirContext.search(未知   来源)at   org.apache.catalina.realm.JNDIRealm.getUserBySearch(JNDIRealm.java:1446)     在org.apache.catalina.realm.JNDIRealm.getUser(JNDIRealm.java:1297)     在org.apache.catalina.realm.JNDIRealm.getUser(JNDIRealm.java:1253)     在   org.apache.catalina.realm.JNDIRealm.authenticate(JNDIRealm.java:1194)     在   org.apache.catalina.realm.JNDIRealm.authenticate(JNDIRealm.java:1052)     在   org.apache.catalina.authenticator.BasicAuthenticator.authenticate(BasicAuthenticator.java:164)     在   org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:573)     在   org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)     在   org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)     在   org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)     在   org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)     在   org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)     在   org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)     在   org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:607)     在   org.apache.tomcat.util.net.AprEndpoint $ SocketProcessor.doRun(AprEndpoint.java:2441)     在   org.apache.tomcat.util.net.AprEndpoint $ SocketProcessor.run(AprEndpoint.java:2430)     在java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(未知   来自java.util.concurrent.ThreadPoolExecutor $ Worker.run(未知   来自java.lang.Thread.run(未知来源)

这显然意味着 LDAP 未连接,我需要在进行身份验证之前进行绑定。

搜索网页后,我发现了这一点,但我不知道如何创建自定义域:

Integrating AD with web application running on Tomcat

1 个答案:

答案 0 :(得分:0)

我们在此处发布了Tomcat and LDAP

所使用的内容

BTW:你永远不应该使用比较模式。凭证的比较通常绕过LDAP目录中的安全机制。可以绕过入侵者检测,过期密码(和登录)等安全机制。