[daisy] CAS as an authentication scheme in daisy

Frank Taffelt frank.taffelt at interface-business.de
Mon Oct 8 05:20:25 CDT 2007


Hello,

i started to integrate CAS http://www.ja-sig.org/products/cas/ as an 
authentication scheme into daisy.

CAS provides an infrastructure for authenticating users and helps to 
provide SingleSignOn for applications (mostly webapplications). For a 
multilayered application like daisy with the daisywiki and the 
daisyrepository - CAS provides a solution where a proxying application 
(daisywiki) acquires a Proxyticket and this proxyticket is handed to the 
proxied application (daisyrepository) for the real login process. So i 
created the needed components to implement this scenario and act as an 
daisy authentication scheme.

In the daisywiki i'm using an CocoonAction which retrieves the 
proxyticket and uses it as the password:

if(currentUser.equals("guest")){
...
     WikiHelper.login(user, proxyTicket, request, serviceManager);
...
}

It's important to know that this proxyticket can only be used once (it's 
a ONE TIME TICKET for security reasons) for authentications.

in generally it works. But sometimes i see exceptions like the following:

Stacktrace:
org.outerj.daisy.repository.clientimpl.infrastructure.DaisyHttpClient.handleNotOkResponse 
(DaisyHttpClient.java:155)
org.outerj.daisy.repository.clientimpl.infrastructure.DaisyHttpClient.executeMethod 
(DaisyHttpClient.java:83)
org.outerj.daisy.repository.clientimpl.acl.RemoteAclStrategy.filterDocuments 
(RemoteAclStrategy.java:146)
org.outerj.daisy.repository.commonimpl.acl.CommonAccessManager.filterDocuments 
(CommonAccessManager.java:80)
org.outerj.daisy.repository.commonimpl.acl.AccessManagerImpl.filterDocuments 
(AccessManagerImpl.java:94)
org.outerj.daisy.frontend.IndexPageApple.processInternal 
(IndexPageApple.java:60)
org.outerj.daisy.frontend.util.AbstractDaisyApple.process 
(AbstractDaisyApple.java:58)

i tracked the code down to following:

org.outerj.daisy.repository.clientimpl.infrastructure.AbstractRemoteStrategy 
which does in getClient something like this:

UsernamePasswordCredentials credentials =
                 new UsernamePasswordCredentials(login + "@" + 
getActiveRoleString(user.getActiveRoleIds()), user.getPassword());

this means in some cases new credentials are created and the password, 
which is in my case a INVALIDT proxyticket, is reused?

If i'm on the right track, is there some way to avoid this?

Thanks,
Frank


More information about the daisy mailing list