[Zope] Zope PAS for pubcookie authentication

cristopher pierson ewing cewing at u.washington.edu
Tue Nov 21 16:52:25 EST 2006


Hi, rank newbie here, so please be gentle if I'm being stupid.

I was here last week a bit looking into authentication using the pubcookie 
SSO.  I've gotten a working version that allows me to log into the ZMI and 
I want to verify a few things, mostly if I'm opening any huge security 
holes that I'm not familiar enough with the system to see.  Also I have a 
few questions about how the plugins for various PAS functions get selected 
and how to tell which is working at any given time.

Anyway, here's the meat of the process.

Pubcookie sets up a situation using an apache module where requests to 
protected URLs get forwarded to an auth server where username and password 
are checked, and a cookie is set containing the username.  There is an 
additional apache mod called mod_fba (fake basic authentication) which 
then takes the information returned by the pubcookie server and packages 
it as if it were a basic authentication, setting the login to the username 
returned by pubcookie.

I've started messing with this all by using the PASPlugins plugin called 
apachepas as a base.  It seemed a good place to start as the 
authentication piece is handled by apache.

Apachepas defines two plugins, an ExtractionPlugin and an AuthPlugin.  The 
extraction plugin as I've rewritten it contains the following method:

   def extractCredentials(self,request):
     """
     extract credentials
     """
     user_id = request.getHeader('REMOTE_USER', None)
     if not user_id:
       return None
     return {'user_id': user_id}

The AuthPlugin as I've rewritten it contains the following method:

   def authenticateCredentials(self, credentials):
     """See IAuthenticationPlugin.
     """
     user_id = credentials.get('login', None)
     if user_id is None:
       return None
     return user_id, user_id

Now, here's my first question.  Astute observers may notice that the name 
for the login name in the credentials used by authenticateCredentials is 
different than the name set for the login in extractCredentials.  This is 
because when I peeked at the credentials passed in to 
authenticateCredentials, it appears to be using a different set of 
credentials than I set.  I'm thinking I must be missing a step in there 
somewhere, but I don't know what it is.  Is there some method being called 
somewhere that takes the {'user_id': user_id} tuple returned by 
extractCredentials and repackages it into a credentials tuple that looks 
like this:

{'extractor': 'credentials_basic_auth', 'login': 'myname', 'password': 
'password', remote_host': '', 'remote_address': 'some.address.com'}?

Or, is it that my extractCredentials plugin is not being used, despite 
being the first listed on the 'active' list for extraction plugins?

Second question:
if it is possible that the credentials returned might look different 
depending on which extraction plugin is used, is there a good way for me 
to code the authenticateCredentials plugin so that it can get the right 
element as user_id and return it?  Where do the stock plugins for PAS live 
on disk?  I'd love to look them over.

Third question:
How do plugins get selected for PAS tasks like extraction?  Is there a way 
to force the selection of my tool?  or would that break everything?

Thanks for helping a newbie here.  I'm getting up to speed slowly.

Cris

********************************
Cris Ewing
CME and Telehealth Web Services
Department of Radiology Web Services
University of Washington
School of Medicine
Work Phone: (206) 685-9116
Home Phone: (206) 365-3413
E-mail: cewing at u.washington.edu
*******************************



More information about the Zope mailing list