Easy Windows Authentication with Tomcat 4.x
The original blog entry by Robert Rasmussen has disappeared from the Internet (cannot find server) so I'm reproducing it here via Google's caching feature. I've made a few changes to pretty up the formatting, but that's about it.
I've been pulled into a little internal project, and one of the requirements is that users should be able to authenticate with their Windows login and password. IIS may or may not be in the picture.
Since the server is a Windows 2000 machine, this turns out to be extremely simple to do thanks to Andy Armstrong's JAAS login modules.
Once you've downloaded the login modules, set your classpath accordingly and
make sure that the directory holding NTSystem.dll is in your %PATH% variable.
Next, in the "Sample config" folder you'll find a tagish.login
file and a java.security.sample
file. The last line in the .sample
file is significant, and it needs to be in your $JAVA_HOME/jre/lib/security
folder (in a file named java.security
). You should copy the tagish.login
file there as well. If your users will always be logging into the same domain
(which is the case in my situation), just set the defaultDomain property in
tagish.login, like this:
NTLogin { com.tagish.auth.win32.NTSystemLogin required returnNames=true returnSIDs=false defaultDomain=YOUR_DOMAIN_HERE; };
Now, all you need to do to use Windows authentication in your webapps is to
make one addition to your server.xml
file (or to your specific
context's definition):
<Realm className="org.apache.catalina.realm.JAASRealm" debug="99" appName="NTLogin" userClassNames="com.tagish.auth.win32.NTPrincipal" roleClassNames="com.tagish.auth.win32.NTPrincipal" />
I'll admit this config is slightly hokey. If you look at the Catalina JAASCallbackHandler (which is hardwired to JAASRealm), the way that I have the realm configured above pretty much counts on the User principal (in effect, the user name) being the first principal returned. This is evil, but it works. It would be nice if either Catalina allowed a pluggable CallbackHandler so that I could take advantage of the NTPrincipal.getType() method or if Andy's code returned subclasses of NTPrincipal like UserPrincipal or GroupPrincipal that I could specify in server.xml.
Once you've got this all configured, the various groups your users belong to equate to role names (so if I belong to an administrators group, my authenticated user will be in role "administrators"), and you can configure security in your webapps using these roles.
Posted by Robert Rasmussen on February 18, 2003 at 04:18 AM MST #
Posted by Jimmy Wong on February 18, 2003 at 07:42 AM MST #
Posted by Matt on February 18, 2003 at 02:00 PM MST #
Posted by Nicholas Whitehead on February 20, 2003 at 06:59 PM MST #
Posted by Roman Velichko on August 06, 2003 at 06:21 AM MDT #
Posted by Matt Raible on August 06, 2003 at 02:10 PM MDT #
Posted by Robert Rasmussen on August 06, 2003 at 04:58 PM MDT #
Posted by Tomasz Luczynski on March 09, 2004 at 10:23 AM MST #
Posted by Chris Maeda on July 18, 2004 at 04:24 PM MDT #
Posted by Chris Maeda on July 18, 2004 at 04:38 PM MDT #
Posted by 69.193.88.30 on November 09, 2004 at 10:12 AM MST #
Posted by 69.193.88.30 on November 14, 2004 at 08:53 AM MST #
Posted by 69.42.81.244 on January 01, 2005 at 09:32 AM MST #
Posted by Vicky on April 01, 2005 at 05:45 PM MST #
Posted by Joe Scalise on August 08, 2005 at 08:41 PM MDT #
Posted by Swanand Joshi on July 31, 2006 at 05:40 AM MDT #
Posted by 217.33.106.234 on March 19, 2007 at 11:41 AM MDT #
Posted by 59.95.166.129 on May 08, 2007 at 10:07 AM MDT #
Posted by 59.95.166.129 on May 08, 2007 at 10:11 AM MDT #