Java JNDI查找到Microsoft Active Directory(使用Tomcat 6),身份验证失败

时间:2011-09-27 16:33:12

标签: java jsp active-directory tomcat6 jndi

我们的想法是通过配置我的Tomcat 6容器来执行身份验证(带有用户名+密码的基本表单),以便它(使用JNDI Realm)连接到Microsoft Active Directory以检查凭据是否正确。

我已经找到了很多关于这个主题的文档但是我没有正确地配置Realm。

这是我在Oracle网站上找到的文档(自Tomcat 4以来恰好相同)http://tomcat.apache.org/tomcat-6.0-doc/realm-howto.html#JNDIRealm

发现这个Oracle文档非常糟糕,但遇到了其他网站,例如这个http://www.jspwiki.org/wiki/ActiveDirectoryIntegration详细阐述了这个主题。

然而,经过多次尝试,我仍然无法成功验证:

  1. 当我启动Tomcat时,一切似乎都很好,没有出现警告或任何其他错误消息。
  2. 当我尝试进行身份验证时,我会一直重定向到我的错误页面。并且不会出现警告或任何其他消息。
  3. 这些是我尝试过的两种Realm配置

    <Realm className="org.apache.catalina.realm.JNDIRealm" debug="99"
       connectionName="test"
       connectionPassword="test"
       connectionURL="LDAP://subDomain.myDomain.co.uk:389"
       userPattern="uid={0},ou=London,dc=subDomain,dc=myDomain,dc=co,dc=uk"
       roleBase="ou=London,dc=subDomain,dc=myDomain,dc=co,dc=uk"
       roleName="cn"
       roleSearch="memberUid={1}"
    />
    
    <Realm className="org.apache.catalina.realm.JNDIRealm" debug="99"
      connectionName="test"
      connectionPassword="test"
      connectionURL="LDAP://subDomain.myDomain.co.uk:389"
      userBase="ou=London,dc=subDomain,dc=myDomain,dc=co,dc=uk"
      userSearch="(sAMAccountName={0})"
      roleBase="ou=Groups,dc=subDomain,dc=myDomain,dc=co,dc=uk"
      roleName="cn"
      roleSubtree="true"
      roleSearch="(member={0})"
    />
    

    我已经使用LDAP浏览器测试了连接凭据,它们很好。

    这是我的web.xml

    <web-app>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    
      <security-constraint>
        <display-name>Example Security Constraint</display-name>
        <web-resource-collection>
            <web-resource-name>Protected Pages</web-resource-name>
            <url-pattern>/protected/*</url-pattern>
            <http-method>GET</http-method>
            <http-method>POST</http-method>
        </web-resource-collection>
        <auth-constraint>
            <role-name>London</role-name>
        </auth-constraint>
      </security-constraint>
    
      <!-- Default a login configuration that uses form-based authentication -->
      <login-config>
        <auth-method>FORM</auth-method>
        <realm-name>DBRealm</realm-name>
        <form-login-config>
            <form-login-page>/WEB-INF/login.jsp</form-login-page>
            <form-error-page>/WEB-INF/error.jsp</form-error-page>
        </form-login-config>
      </login-config>
    
      <!-- Define a logical role for this application, needs to be mapped to an actual role at deployment time -->
      <security-role>
        <description>All Users</description>
        <role-name>London</role-name>
      </security-role>
    </web-app>
    

    提前致谢, 甲

1 个答案:

答案 0 :(得分:0)

您是否在AD中使用uid或memberUid属性?那些都是非典型的。

您可能希望将uid=中的userPattern替换为cn=

对于roleSearch,实际上可能应该是member=