Hi there,

We've successfully set up a custom LoginModule for handling xmldsig logins 
(using smart card readers). 

However, in case of a LoginException we'd like to propagate the Exception from 
the location where it is thrown (which would be in our LoginModule.login() - 
method) to the web user interface.

The communication way is as follows:
- The user is accessing a web page
- The user is redirected to the form-login-page of web.xml
- The uthenticate() method
- The FormAuthenticator.authenticate() method is invoked
- The LoginModule.login()-method is invoked
- LoginModule.login() -> throws LoginException("Sorry folk, the certificate has 
been revoked");
- The FormAuthenticator gets the null-value for the principal and redirects to 
form-error-page.

==> The LoginException never makes its way back to the Authenticator. As far as 
I see, the exception is somehow masked inside the JBossSecurityMgrRealm - there 
the principal is simply returned with a null-value, and authentication errors 
could be noticed in TRACE-mode.

===============================================
Snippet from org.jboss.web.tomcat.tc4.authenticator.FormAuthenticator
===============================================

     String username = hreq.getParameter(Constants.FORM_USERNAME);
      String password = hreq.getParameter(Constants.FORM_PASSWORD);
      if (debug >= 1)
         log("Authenticating username '" + username + "'");
      principal = realm.authenticate(username, password);
      if (principal == null)
      {
         if (debug >= 1)
            log("Redirect to error page '" + errorURI + "'");
         hres.sendRedirect(hres.encodeRedirectURL(errorURI));
         return (false);
      }



===============================================
Snippet from org.jboss.web.tomcat.security.JBossSecurityMgrRealm
===============================================

         if (securityMgr.isValid(principal, passwordChars))
         {
            log.trace("User: " + username + " is authenticated");
//.... removed
         }
         else
         {
            principal = null;
            if (trace)
               log.trace("User: " + username + " is NOT authenticated");
         }


Given the above way of communication, it seems quite hard to detect errors. 

So far we've discussed the following options to trap the LoginException:
*) Perform a LoginModule.login() in the error-jsp page and trap the 
LoginException ourselves (thus the whole login-procedure will be done twice in 
case of an login-error).

*) Return a Principal with the LoginException-data stored in an 
Exception-property. However, this could impose a security risk as the user 
would be authenticated as a Principal (with no roles).

Does anyone know of more delicate options available?

thx alot
joe


View the original post : 
http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3873737#3873737

Reply to the post : 
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3873737


-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
JBoss-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to