On 24/04/11 08:50, Jim Willeke wrote:
We are using Container Authentication and Authorization with JspWiki and
LDAP.
http://ldapwiki.willeke.com/wiki/TomcatAndLDAP

-jim
Jim Willeke


On Sat, Apr 23, 2011 at 8:20 PM, jlist9<[email protected]>  wrote:

I found this page in my searching for a way to authenticate against OpenDS
LDAP
server. This is the page I found:
http://www.jspwiki.org/wiki/LDAPAuthentication?version=25

However I'm still confused after reading it. I'm using the latest version
of
jspwiki.
Is there an official or semi-official way of authenticating against a LDAP
server?

Thanks,
Jack

I can confirm that all the documentation exists, yet it can be hard to follow and integrate, even if you believe you understand ldap AND container security! What I have works well and scales, but might not be perfect.

1. You need to set up your ldap directory for webapp users:
1.1. Define an attribute to hold the various container security classes that you want. I couldn't find anything pre-defined that suited me, so I created a new attribute called "tomcatRole" in a "spare" section of the schema oid space. 1.2. I then defined a new objectClass that would permit user entries to have tomcatRole attributes, in my case called "tomcatRoleAllowed". 1.3. I then modified my user entries to add the tomcatRoleAllowed objectclass and appropriate tomcatRole attributes (e.e. wikiUser, webMailUser, manager, etc).

At this point, you have a Authentication/Authorisation dataset in the ldap directory, but nothing is using it.

2. You need to set up your ldap directory so that your web server can authenticate users against the ldap directory: 2.1. If you don't have one already, set up ACI's and a group that has permission to read "secure" attributes, such as password hashes and the new container role. 2.2. define a new authenticator user entry for tomcat and put it into the group.

At this point, you should be able to test the new authenticator credentials by searching for a user entry and retrieving the password hash and the associated web container authorisations.

3. Turn on tomcat container security:
3.1. Modify the tomcat conf/server.xml inside the <engine> to define a JNDIRealm which specifies the ldap directory server and your authenticator's credentials, how to search for user entries and which (protected) attributes to retrieve. 3.2. Within the Host entry, define the SingleSignOn Valve so that someone authenticating with any webapp will not need to signon again when going to a different webapp container.

At this point, tomcat will force users that wish to access a protected webapp to signon (if they haven't already done so), authenticating them against your ldap directory and discovering the roles they have been assigned. The webapps only know the names of the roles - not how they are stored or assigned.

4. Configure jspwiki to use container security:
4.1. turn on the commented-out section in wiki/WEB-INF/web.xml and modify it to suit your requirements. My jspwiki has several security constraints: the entire container is protected; guests can only read; some users can create new entries; managers can delete. It is tricky to define exactly which resources need to be protected at the different levels, but it isn't too confusing because you are only working with a few abstract role names. I had to do a lot of testing to fine tune my web-resource-collections before I was satisfied.

At this point, your other webapps would not be protected. My own system has only the home and standard error pages unprotected, so I had to setup a single signon and menu webapp that forces all users to authenticate. I also had to modify each of my other webapps to enforce container security.

It is a lot to do, but it will work in the end. If you follow the sequence of tasks above, you should have confidence that each step is correct and so need only worry about one thing at a time!

Good luck,

Brian

Reply via email to