There seems to be good documentation for configuring Realms. I
currently have a JAASRealm working by implementing a
javax.security.auth.spi.LoginModule


I have found very little documentation for custom Authenticators. Your
_outline_ is helpful, but I am still struggling.

My class which extends
org.apache.catalina.authenticator.BasicAuthenticator contains:

org.apache.catalina.Realm realm = context.getRealm();
log.trace( "Info: " + realm.getInfo() );

The logs are outputting "Info: org.apache.catalina.realm.RealmBase/1.0"

Any clue on how to get it to use "org.apache.catalina.realm.JAASRealm/1.0" ?

My web.xml still contains

<login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>CUSTOMRealm</realm-name>
    </login-config>


Thanks for any insight or pointers to documentation on Authenticators.
-Steve More


On 9/26/07, Edwin K. Brown wrote:
> I'm doing this to provide an _outline_ of what is needed to be done to get 
> CLIENT-CERT authentication and authorization working in Tomcat 6. This is 
> high level because each implementation will have to be done to suit your own 
> needs.
>
>
>
> This first part deals with the JAAS related code that you have to create:
>
>
>
> *       The Tomcat documentation states that the 
> org.apache.catalina.realm.JAASRealm has to be used to get this working. 
> Actually, the JAASRealm should be extended or you create a class that extends 
> org.apache.catalina.realm.RealmBase. For purposes of this post, lets call 
> this class CertJASSRealm.
> *       In CertJASSRealm, the authenticate(X509Certificate certs[]) method 
> needs to be over-ridden/implemented to perform the certificate validation.
> *       In CertJASSRealm, the getPrincipal(String username) and 
> getPrincipal(String username, String subject) methods needs to be 
> over-ridden/implemented to create the principal.
> *       The Tomcat documentation states that it is best to implement your own 
> Role and User class, and that is definitively the case!
> *       Create a class to handle the role.
> *       Create a class to handle the user. This seems to be one of the keys 
> to getting this right. Let's call this class CertJASSUser. The getRoles() 
> method needs to be implemented to retrieve the roles associated with this 
> user. In the "demo" that I did, I had this return a set array of roles. I 
> imagine in "the real world," this would go to some external source like LDAP, 
> a database, or a file, to retrieve roles, if any, for the user.
> *       In CertJAASUser, implement hasRole(String role) that determines if 
> the user has the role name passed in.
> *       Implement a LoginModule class and a CallbackHandler class to the JAAS 
> specification to suit your needs.
> *       Let's call the CallbackHandler class CertCallbackHandler. I created a 
> method that sets the certificates, public void setCerts(X509Certificate[] 
> certs), for use later on during the login() process.
> *       Let's call the LoginModule implementation CertLoginModule. The 
> initialize(Subject, CallbackHandler, Map, Map)  method should do any 
> initialization needed. The login() method should do the "login" using the 
> certificates from the CertCallbackHandler object.
> *       Make sure you create the JAAS configuration file. The name of the 
> module in this example is CertJaas.
>
>
>
> This second part deals with SSL authentication. This has to make it possible 
> to get the authentication with certificates:
>
> *       Create a class that extends 
> org.apache.catalina.authenticator.AuthenticatorBase. Let's call this class 
> CertSSLAuthenticator
> *       Implement authenticate(Request request, Response response, 
> LoginConfig config). The TOMCAT class SSLAuthenticator is a good class to use 
> as a model for what to do for the authentication process. I think CRL lookup 
> or OCSP could be used in this method.
>
>
>
>
>
> This third part deals with what you have to do to get TOMCAT to recognize 
> that you have JAASRelam code that you want to be used instead of what TOMCAT 
> provides. Please note that JAASRealm is the ONLY JAAS implementation that 
> TOMCAT will recognize "out of the box" without make the following changes. 
> Believe me, if you don't do the following, you will NOT get it working 
> properly. You will have to extract, modify, and replace some files in 
> catalina.jar.
>
> *       Make a copy of catalina.jar.
> *       Extract org/apache/catalina/authenticator/mbeans-descriptors.xml
> *       Copy the mbean tag with attribute name "SSLAuthenticator".
> *       Change the name attribute to the name of the file you created to do 
> the SSL authentication in the second part. In this case, the name would be 
> CertSSLAuthenticator.
> *       Modify the type attribute to the full class name of the SSL 
> authenticator class.
> *       Save the file and replace it in the catalina jar.
> *       Extract org/apache/catalina/startup/Authenticators.properties
> *       There is an entry for CLIENT-CERT: 
> CLIENT-CERT=org.apache.catalina.authenticator.SSLAuthenticator. Change the 
> class name to the class of the SSL authenticator class created. In this case, 
> CertSSLAuthenticator.
> *       Save the file and replace it in catalina.jar
>
>
>
> The above was done because by default, TOMCAT uses it's own files and no 
> matter how you override things, your own code doesn't get called.
>
>
>
>
>
> The fourth part deals with the server.xml configuration.
>
> *       The for the realm, an example would be as follows:
>
> <Realm classname="example.CertJAASRealm" appName="CertJass" 
> userClassNames="example.CertJASSUser"
>
> roleClassNames="example.CertJASSRole" resourceName="CertJass" />
>
>
>
>
>
> That is an outline of what I did to get it working. I'm sending this so that 
> Google will find it and give it as a _possible_ way of getting it done. It 
> appears to me that the TOMCAT team could make this a lot easier to do.
>
>
>
> Ed Brown
> Senior Software Architect
> Vision Systems & Technology, Inc.
>
> ________________________________
>
> 6021 University Boulevard, Suite 360 ▪ Ellicott City ▪ Maryland ▪ 21043
> Tel: 443.283.0135 ▪ Fax: 410.418.8580
> Email: [EMAIL PROTECTED]
> Web: http://www.vsticorp.com/
>
>
>
>

Reply via email to