[Twisted-web] Sessions and Authentication for Web2

Phil Mayers p.mayers at imperial.ac.uk
Wed Nov 30 14:04:16 MST 2005


Jean-Paul Calderone wrote:
> On Tue, 29 Nov 2005 17:26:32 +0000, Phil Mayers 
> <p.mayers at imperial.ac.uk> wrote:
>>
>> [snip]
>>
>> class MultiPortal(Portal):
>>   def login(self, credlist):
>>     for c in self.checkers:
>>       # All or a subset...
>>       if c.canHandle(credlist):
>>         return c.login(credlist)
>>     for c in self.checkers:
>>       c.maybeChallenge(credlist)
>>
>> ...which starts to look very different from cred as-is
> 
> I haven't had time to catch up on this thread, but I wanted to point out 
> that it is pretty much always wrong to subclass Portal.  If you ever 

Yes, wanting to is a symptom of the underlying problem, which is that 
for HTTP and Digest auth, you have to send the initial challenge back 
with the 401. To do this, you have to communicate with the checker to 
generate said challenge, or implement the digest algo. inside the HTTP 
proto, which is way nasty and breaks sharing. This either means:

  * "just deciding" that the client *will* use digest, creating a digest 
creds object that will issue the 401 and challenge, and calling "login" 
with it - losing auth mechanism negotiation support, which is nasty

  * holding a reference to a "challenge" method on the digest checker, 
and potentially any other challenge-with-401 mechs, breaking the 
encapsulation, which is nasty

  * adding a pre-login-stage mechanism to portal, or otherwise futzing 
the API, which is nasty

I would add that the listCredentialInterfaces method is not really 
sufficient for a completely configuration-free decision on what 
mechanisms to present the client - some (e.g. plain/login) may only be 
available over certain channels depending on policy, and deciding that 
policy may require a method call into the checker *instance* with a 
protocol-neutral description of the "connection characteristics" (e.g. 
the SSF in SASL)

It is, in general, a non-trivial problem in any environment. None of 
these issues are specific to Twisted. Witness the hassle GSSAPI, SASL 
and EAP cause. But to drag this back on topic, the original discussion 
was that t.web2 was MANDATED to use t.cred for authentication, and it 
seems to me at least there are unanswered questions about how it will work.

I'm sure it will, and am interested in working out how - hence the 
flurry of emails. Perhaps I'll have another go next week (since I am 
moving datacentre for the rest of this one)



More information about the Twisted-web mailing list