Washington Mailman

From RavenWiki
Jump to navigationJump to search

This case study illustrates how an application with built-in
authentication services can be integrated with a
container-based WebISO system so that local and non-local users
can self-select which kind of authentication is appropriate to
them: either the container-based WebISO mechanism for local
users or the original built-in authentication mechanism for
non-local users.

In this case study, the University of Washington (UW) wanted to
integrate new web-based email discussion list management
software with its local WebISO system. Mailman was the package
needing integration. Pubcookie was the WebISO system. The goal
was to augment Mailman specifically to use Pubcookie to
authenticate UW users by local UW NetIDs, while continuing to
use Mailman's built-in authentication system, based on email
addresses and membership passwords, to authenticate non-UW
users.

These dueling authentication requirements prevented a typical
container-based solution of simply protecting the entire
Mailmain application with Pubcookie. Doing so would not have
allowed non-UW users to use Mailman, since they wouldn't have
UW NetIDs with which to authenticate. It also would have
over-applied authentication to public pages, for example
Mailman's "listinfo" pages which display information about
individual email lists. All public pages should remain
unauthenticated, as they are in Mailman to begin with, and
again this precluded a typical container-based approach of
placing Mailman within a Pubcookie-based container. Thus,
another solution would have to be found.

The best integration solution (and the one adopted by UW
developers) would be the one that minimized changes to Mailman
itself, so that Mailman could continue to display login forms
as needed for non-UW users and more generally to initiate
authentication when and where it was already required. Only now
it would be modified to use two different underlying
authentication mechanisms, depending on the choice of each
user. In the case of UW users, Mailman would have to initiate
Pubcookie-based authentication without itself being put into a
Pubcookie-protected container. In the case of non-UW users,
Mailman would simply initiate its existing authentication
mechanism.

This task was accomlished by introducing a simple "stub"  
application along side of Mailman. This "stub" application is
deployed within a Pubcookie-protected directory so that it can
collect authentication information (REMOTE_USER) from Pubcookie
and forward it into Mailman. The "stub" application
accomplishes the forwarding process by setting a SHA1 encrypted
cookie with a broad enough scope to reach the main Mailman
application. The presence of this new cookie, which contains
the user's UW NetID, allows the integrated Mailman application
to vector between the two authentication mechanisms. If it's
present, Mailman has authenticated a local UW user. If it's
not, Mailman continues with its pre-existing authentication
mechanism. (Technically speaking, most of Mailman's
authentication-related functionality happens in and around
calls to Mailman's interal WebAuthenticate() function, and this
is where most of the integration work was focused.)

While fairly straightforward, the modifications to Mailman
involving the "stub" application represent only what was needed
to pass authentication information from a Pubcookie-based
WebISO container into Mailman. In fact, other modifications
were scattered throughout Mailman to make it all work
correctly, including: user interface changes to help users
self-select the appropriate login method, new code to manage
UW-NetID-to-email-address translations required by Mailman,
authorization policy changes, and others. However, these
additional modifications provide no insights into the 
WebISO-specific integrations issues and therefore have been 
omitted. 

This case study simply illustrates what can be done with the
container-based WebISO model, even when much of the
authentication timing and logic is still controlled by the
application.