Hello,

I'm facing the following requirements:

 1. I have multiple systems who wants to expose functionality
    as web services.
 2. I will have multiple front-ends who wants to use these
    services.
 3. All of these front-ends must have single-sign-on and CAS is
    an obvious choice for that.
 4. I also have 3rd parties (customers) who wants to access 
    some of these services from the outside.
 5. I want to use a standard way of putting authentication on 
    my web services; namely WS-Security.
 6. The web services must also accept CAS tickets.

I have a plan on how to do it, but it seems I need some help from you guys (I 
will return to that part in a minute).
Here's how I plan to do it:

 1. All of my web services uses XFire + XFire-ws-security to
    implement the WSS standard.
 2. The web services MUST be accessed over HTTPS so clients can
    send their password (and username) in 'clear text' without
    worry.
 3. External clients are each given their own username and
    password, which they will send with every request.
 4. My front-ends will authenticate with CAS tickets, by 
    specifying 'CAS-TICKET' as the username and the ticket as
    the password.
 5. XFire uses a WSS4JInHandler with CallbackHandlers to do its
    authentication - I will write a CasWssAuthInHandler based on
    this class to handle the CAS specific rules above.
 6. My CasWssAuthInHandler will communicate with the CAS server
    using the build-in CAS web service.

It is point 6 that is causing me the most trouble right now. I used XFire to 
generate java stub classes from the CAS WSDL, but I have no idea how to use 
them.
The Credentials class alone was useless, so I copied the 
UsernamePasswordCredentials class from the CAS source, but I cannot get the XML 
mapping right.
I have tried out all maners of XML layouts in SoapUI, but a
TicketException with the code
    "error.authentication.credentials.unsupported"
Is the only response I have been able to provoke thus far.

If you would just give me a complete SOAP envelope example of 
how to authorize a username & password, then that would make my
day.


Here's the SOAP envelope I send to the CAS server:

<soapenv:Envelope 
  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
  xmlns:cas="http://cas.jasig.org";>
   <soapenv:Body>
      <cas:createTicketGrantingTicket>
         <cas:in0
           xmlns="http://principal.authentication.cas.jasig.org";>
            <cas:usernamePasswordCredentials>
               <cas:username>admin</cas:username>
               <cas:password>admin</cas:password>
           </cas:usernamePasswordCredentials>
        </cas:in0>
      </cas:createTicketGrantingTicket>
   </soapenv:Body>
</soapenv:Envelope>


And here's the server's response:

<soap:Envelope 
  xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";
  xmlns:xsd="http://www.w3.org/2001/XMLSchema";
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
   <soap:Body>
      <soap:Fault>
         <faultcode>soap:Server</faultcode>
         <faultstring>
            error.authentication.credentials.unsupported
         </faultstring>
         <detail>
            <TicketException xmlns="http://cas.jasig.org";>
               <code xmlns="http://ticket.cas.jasig.org";>
                  error.authentication.credentials.unsupported
               </code>
            </TicketException>
         </detail>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>






Med venlig hilsen/Best regards
Christian Vest Hansen 
Developer 
 
Reception  +45 3393 1434
Mobile        +45 6130 4121
Web            www.unwire.com

UNWIRE ApS
Masnedøgade 20, 3. sal
DK-2100 Copenhagen Ø. 
Denmark

_______________________________________________
Yale CAS mailing list
[email protected]
http://tp.its.yale.edu/mailman/listinfo/cas

Reply via email to