After having searched the MARC archives and Google for the better part of a week I do not seem to be able to duplicate others' past success with getting Tomcat to use a JNDI realm to authenticate users via Active Directory. Basically I'm just trying to get a simple web app straight from the Tomcat docs to work, but with JNDI instead of tomcat-users.xml. The app I'm using works fine, without modification, when run against tomcat-users. So there's something quirky about getting JNDI hooked up that necessarily varies from one organization's implementation of AD to another's. Would those of you who have trod this ground before mind suggesting where I might have gone astray?

Thank you.



Details
======

1) A fresh install of Tomcat 5.5.12 on OSX 10.4.6 as obtained from: http://www.versiontracker.com/dyn/moreinfo/macosx/27151

2) SERVER.XML excerpt:

    <!-- Define the top level container in our container hierarchy -->
    <Engine name="Catalina" defaultHost="localhost">

     [snip]

      <Realm className="org.apache.catalina.realm.JNDIRealm"
                debug="99"
                connectionURL="ldap://[primary domain controller ip]:389"
                alternateURL="ldap://[backup domain controller ip]:389"
                referrals="follow"
userBase="CN=Users,DC=[mydepartment],DC=[mydivision],DC= [ourintranetdomain]"
                userSearch="(sAMAccountName={0})"
                userSubtree="true"
                userRoleName="memberOf"
                rolename="cn"
      />

     [big snip]

3) Excerpt from ldap directory (obtained via LDP):

Expanding base ' CN=Firstname Lastname,CN=Users,DC=mydepartment,DC=mydivision,DC=ourintranetdomain'...
Result <0> (null)
Matched DNs:
Getting 1 entries:
>> Dn: CN=Firstname Lastname,CN=Users,DC=mydepartment,DC=mydivision,DC=ourintranetdomain 4> memberOf: CN=GroupName1,CN=Users,DC=mydepartment,DC=mydivision,DC=ourintranetdomai n; CN=GroupName2,CN=Users,DC=mydepartment,DC=mydivision,DC=ourintranetdomai n;
        1> sAMAccountName=jl;

4) All other realms commented-out of server.xml. I am led to believe that an engine may possess exactly one authentication realm.

5) Application WEB.XML excerpt:

   <security-constraint>
      <display-name>My Security Constraint</display-name>
      <web-resource-collection>
         <web-resource-name>Protected Area</web-resource-name>
         <!-- Define the context-relative URL(s) to be protected -->
         <url-pattern>/*</url-pattern>
         <!-- If you list http methods, only those methods are protected -->
         <http-method>DELETE</http-method>
         <http-method>GET</http-method>
         <http-method>POST</http-method>
         <http-method>PUT</http-method>
      </web-resource-collection>
      <auth-constraint>
<!-- Anyone with one of the listed roles may access this area -->
         <role-name>GroupName1</role-name>
         <role-name>GroupName2</role-name>
      </auth-constraint>
    </security-constraint>

    <!-- Default login configuration uses form-based authentication -->
    <login-config>
      <auth-method>FORM</auth-method>
      <form-login-config>
        <form-login-page>/login.html</form-login-page>
        <form-error-page>/error.html</form-error-page>
      </form-login-config>
    </login-config>

    <!-- Security roles referenced by this web application -->
    <security-role>
      <role-name>GroupName1</role-name>
    </security-role>
    <security-role>
      <role-name>GroupName2</role-name>
    </security-role>

6) The LOGIN.HTML and ERROR.HTML pages are again, straight from the docs and call j_securitycheck, etc.

Results
======

1) When I run build.xml (modified slightly from the sample provided in the Tomcat docs) I get:

% ant list
Buildfile: build.xml

list:

BUILD FAILED
build.xml:407: java.io.IOException: Server returned HTTP response code: 401 for URL: http://localhost:8080/manager/list

Total time: 1 second
%


I conclude from looking at the logs that the manager app has failed to authenticate. I am certain that I have the correct username and password in the build.properties file. The list, install, and remove Ant tasks all work fine when Tomcat is using the stock UserDatabase realm.


2) The log excerpt:

DEBUG http-8080-Processor24 org.apache.catalina.authenticator.AuthenticatorBase - Security checking request GET /manager/list DEBUG http-8080-Processor24 org.apache.catalina.realm.RealmBase - Checking constraint 'SecurityConstraint[HTMLManger and Manager command]' against GET /list --> true DEBUG http-8080-Processor24 org.apache.catalina.realm.RealmBase - Checking constraint 'SecurityConstraint[HTMLManger and Manager command]' against GET /list --> true DEBUG http-8080-Processor24 org.apache.catalina.authenticator.AuthenticatorBase - Calling hasUserDataPermission() DEBUG http-8080-Processor24 org.apache.catalina.realm.RealmBase - User data constraint has no restrictions DEBUG http-8080-Processor24 org.apache.catalina.realm.RealmBase - User data constraint has no restrictions DEBUG http-8080-Processor24 org.apache.catalina.authenticator.AuthenticatorBase - Calling authenticate() DEBUG http-8080-Processor24 org.apache.catalina.authenticator.AuthenticatorBase - Failed authenticate() test

3) When I try to run the Tomcat Admin and Tomcat Manager applications, neither of which have been modified by me, I also fail to authenticate and the log shows:

DEBUG http-8080-Processor25 org.apache.catalina.connector.CoyoteAdapter - Requested cookie session id is 36F940547ADE4896755EA6B047744EC0 DEBUG http-8080-Processor25 org.apache.catalina.authenticator.AuthenticatorBase - Security checking request GET /admin/ DEBUG http-8080-Processor25 org.apache.catalina.realm.RealmBase - Checking constraint 'SecurityConstraint[Protected Area]' against GET / index.jsp --> true DEBUG http-8080-Processor25 org.apache.catalina.realm.RealmBase - Checking constraint 'SecurityConstraint[Protected Area]' against GET / index.jsp --> true DEBUG http-8080-Processor25 org.apache.catalina.realm.RealmBase - Checking constraint 'SecurityConstraint[Protected Area]' against GET / index.jsp --> true DEBUG http-8080-Processor25 org.apache.catalina.realm.RealmBase - Checking constraint 'SecurityConstraint[Protected Area]' against GET / index.jsp --> true DEBUG http-8080-Processor25 org.apache.catalina.realm.RealmBase - Checking constraint 'SecurityConstraint[Protected Area]' against GET / index.jsp --> true DEBUG http-8080-Processor25 org.apache.catalina.realm.RealmBase - Checking constraint 'SecurityConstraint[Protected Area]' against GET / index.jsp --> true DEBUG http-8080-Processor25 org.apache.catalina.authenticator.AuthenticatorBase - Calling hasUserDataPermission() DEBUG http-8080-Processor25 org.apache.catalina.realm.RealmBase - User data constraint has no restrictions DEBUG http-8080-Processor25 org.apache.catalina.realm.RealmBase - User data constraint has no restrictions DEBUG http-8080-Processor25 org.apache.catalina.authenticator.AuthenticatorBase - Calling authenticate() DEBUG http-8080-Processor25 org.apache.catalina.authenticator.FormAuthenticator - Save request in session '36F940547ADE4896755EA6B047744EC0' DEBUG http-8080-Processor25 org.apache.catalina.core.ApplicationDispatcher - servletPath=/ login.jsp, pathInfo=null, queryString=null, name=null DEBUG http-8080-Processor25 org.apache.catalina.core.ApplicationDispatcher - Path Based Forward DEBUG http-8080-Processor25 org.apache.catalina.core.StandardWrapper - Returning non-STM instance DEBUG http-8080-Processor25 org.apache.catalina.core.ApplicationDispatcher - servletPath=null, pathInfo=null, queryString=null, name=action DEBUG http-8080-Processor25 org.apache.catalina.core.ApplicationDispatcher - Named Dispatcher Include DEBUG http-8080-Processor25 org.apache.catalina.core.StandardWrapper - Returning non-STM instance DEBUG http-8080-Processor25 org.apache.struts.util.ModuleUtils - Get module name for path /login.jsp DEBUG http-8080-Processor25 org.apache.struts.util.ModuleUtils - Module name found: default DEBUG http-8080-Processor25 org.apache.struts.action.RequestProcessor - Processing a 'GET' for path '/login' ERROR http-8080-Processor25 org.apache.struts.action.RequestProcessor - Invalid path /login was requested DEBUG http-8080-Processor25 org.apache.catalina.core.ApplicationDispatcher - Disabling the response for futher output DEBUG http-8080-Processor25 org.apache.catalina.authenticator.AuthenticatorBase - Failed authenticate() test DEBUG http-8080-Processor25 org.apache.catalina.connector.CoyoteAdapter - Requested cookie session id is 36F940547ADE4896755EA6B047744EC0 DEBUG http-8080-Processor25 org.apache.catalina.authenticator.AuthenticatorBase - Security checking request POST /admin/j_security_check DEBUG http-8080-Processor25 org.apache.catalina.authenticator.FormAuthenticator - Authenticating username 'jl' DEBUG http-8080-Processor25 org.apache.catalina.core.ApplicationDispatcher - servletPath=/ error.jsp, pathInfo=null, queryString=null, name=null DEBUG http-8080-Processor25 org.apache.catalina.core.ApplicationDispatcher - Path Based Forward DEBUG http-8080-Processor25 org.apache.catalina.core.StandardWrapper - Returning non-STM instance DEBUG http-8080-Processor25 org.apache.catalina.core.ApplicationDispatcher - Disabling the response for futher output DEBUG http-8080-Processor25 org.apache.catalina.authenticator.AuthenticatorBase - Failed authenticate() test ??/admin/j_security_check

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to