
Integrated Windows authentication is most frequently used within intranet environments since it requires that the server performing the authentication and the user being authenticated are part of the same domain. For the user to be authenticated automatically, the client machine used by the user must also be part of the domain.
There are several options for implementing integrated Windows authentication with Apache Tomcat. They are:
The configuration of each of these options is discussed in the following sections.
Kerberos (the basis for integrated Windows authentication) requires careful configuration. If the steps in this guide are followed exactly, then a working configuration will result. It is important that the steps below are followed exactly. There is very little scope for flexibility in the configuration. From the testing to date it is known that:
dev.local) is always used in
lower case. The domain name is typically not case sensitive.DEV.LOCAL) is always
used in upper case. The realm name is case sensitive.There are four components to the configuration of the built-in Tomcat support for Windows authentication. The domain controller, the server hosting Tomcat, the web application wishing to use Windows authentication and the client machine. The following sections describe the configuration required for each component.
The names of the three machines used in the configuration examples below are
win-dc01.dev.local (the domain controller), win-tc01.dev.local (the Tomcat
instance) and win-pc01.dev.local (client). All are members of the
dev.local domain.
Note: In order to use the passwords in the steps below, the domain password policy had to be relaxed. This is not recommended for production environments.
These steps assume that the server has already been configured to act as a domain controller. Configuration of a Windows server as a domain controller is outside the scope of this how-to. The steps to configure the domain controller to enable Tomcat to support Windows authentication are as follows:
tc01 and has a
password of tc01pass.
<service class>/<host>:<port>/<service name>.
The SPN used in this how-to is HTTP/win-tc01.dev.local. To
map the user to the SPN, run the following:
setspn -A HTTP/win-tc01.dev.local tc01ktpass /out c:\tomcat.keytab /mapuser tc01@DEV.LOCAL
/princ HTTP/win-tc01.dev.local@DEV.LOCAL
/pass tc01pass /kvno 0test with a password of testpass.The above steps have been tested on a domain controller running Windows Server 2019 Standard using the Windows Server 2016 functional level for both the forest and the domain.
These steps assume that Tomcat and an appropriate Java JDK/JRE have already been installed and configured and that Tomcat is running as the tc01@dev.local user. The steps to configure the Tomcat instance for Windows authentication are as follows:
tomcat.keytab file created on the domain controller
to $CATALINA_BASE/conf/tomcat.keytab.$CATALINA_BASE/conf/krb5.ini. The file used in this how-to
contained:[libdefaults]
default_realm = DEV.LOCAL
default_keytab_name = FILE:c:\apache-tomcat-9.0.x\conf\tomcat.keytab
default_tkt_enctypes = rc4-hmac,aes256-cts-hmac-sha1-96,aes128-cts-hmac-sha1-96
default_tgs_enctypes = rc4-hmac,aes256-cts-hmac-sha1-96,aes128-cts-hmac-sha1-96
forwardable=true
[realms]
DEV.LOCAL = {
kdc = win-dc01.dev.local:88
}
[domain_realm]
dev.local= DEV.LOCAL
.dev.local= DEV.LOCALjava.security.krb5.conf system property.$CATALINA_BASE/conf/jaas.conf. The file used in this how-to
contained:com.sun.security.jgss.krb5.initiate {
com.sun.security.auth.module.Krb5LoginModule required
doNotPrompt=true
principal="HTTP/win-tc01.dev.local@DEV.LOCAL"
useKeyTab=true
keyTab="c:/apache-tomcat-9.0.x/conf/tomcat.keytab"
storeKey=true;
};
com.sun.security.jgss.krb5.accept {
com.sun.security.auth.module.Krb5LoginModule required
doNotPrompt=true
principal="HTTP/win-tc01.dev.local@DEV.LOCAL"
useKeyTab=true
keyTab="c:/apache-tomcat-9.0.x/conf/tomcat.keytab"
storeKey=true;
};java.security.auth.login.config system property. The LoginModule
used is a JVM specific one so ensure that the LoginModule specified matches
the JVM being used. The name of the login configuration must match the
value used by the authentication
valve.The SPNEGO authenticator will work with any Realm but if used with the JNDI Realm, by default the JNDI Realm will use the user's delegated credentials to connect to the Active Directory. If only the authenticated user name is required then the AuthenticatedUserRealm may be used that will simply return a Principal based on the authenticated user name that does not have any roles.
The above steps have been tested on a Tomcat server running Windows Server 2019 Standard with AdoptOpenJDK 8u232-b09 (64-bit).
This was tested with:
It should work with any Tomcat release although it is recommended that the latest stable release is used.
The configuration is the same as for Windows but with the following changes:
The web application needs to be configured to the use Tomcat specific
authentication method of SPNEGO (rather than BASIC etc.) in
web.xml. As with the other authenticators, behaviour can be customised by
explicitly configuring the
authentication valve and setting attributes on the Valve.
The client must be configured to use Kerberos authentication. For Internet Explorer this means making sure that the Tomcat instance is in the "Local intranet" security domain and that it is configured (Tools > Internet Options > Advanced) with integrated Windows authentication enabled. Note that this will not work if you use the same machine for the client and the Tomcat instance as Internet Explorer will use the unsupported NTLM protocol.
Correctly configuring Kerberos authentication can be tricky. The following references may prove helpful. Advice is also always available from the Tomcat users mailing list.
Full details of this solution can be found through the Waffle web site. The key features are:
Full details of this solution can be found through the Kerberos extension web site. The key features are:
Full details of this solution can be found through the project web site. The key features are:
Full details of this solution can be found through the project site. The key features are:
There are three steps to configuring IIS to provide Windows authentication. They are:
false. Alternatively, set the
tomcatAuthorization attribute to true to allow IIS to
authenticate, while Tomcat performs the authorization.Apache httpd does not support Windows authentication out of the box but there are a number of third-party modules that can be used. These include:
There are three steps to configuring httpd to provide Windows authentication. They are:
false.