Purpose
Applications need to programmatically access CAS. Generally, proxying works for this. However, there are cases where an application needs to access a resource as itself, in which case proxying doesn't make any sense.
At Rutgers, we've implemented a relatively "heavyweight" SOAP based service via Axis. We're now looking at complementing that with a lightweight resource-driven architecture. This page details that proposed work.
This API works to expose a way to RESTfully obtain a Ticket Granting Ticket resource and then use that to obtain a Service Ticket.
Protocol
The RESTful API follows the same basic protocol as the original CAS2 protocol, augmented with some additional well-defined resource urls (though the protocol doesn't change so it should be just as secure).
Ticket Granting Ticket
The Ticket Granting Ticket is an exposed resource. It has a unique URI.
Request for a Ticket Granting Ticket Resource
POST /cas/tickets HTTP/1.0 username=battags&password=password&additionalParam1=paramvalue
Response for a Ticket Granting Ticket Resource
Successful Response
201 Created
Location: http://www.whatever.com/cas/tickets/{TGT id}
Unsuccessful Responses
If incorrect credentials are sent, CAS will respond with a 400 Bad Request error (will also respond for missing parameters, etc.). If you send a media type it does not understand, it will send the 415 Unsupported Media Type
Request for a Service Ticket
POST /cas/tickets/{TGT id} HTTP/1.0
service={form encoded parameter for the service url}
Response for Service Ticket
Successful Response
200 OK ST-1-FFDFHDSJKHSDFJKSDHFJKRUEYREWUIFSD2132
Unsuccessful Responses
If parameters are missing, etc. CAS will send a 400 Bad Request. If you send a media type it does not understand, it will send the 415 Unsupported Media Type.
Logout of the Service
To log out, you merely need to delete the ticket.
DELETE /cas/tickets/TGT-fdsjfsdfjkalfewrihfdhfaie HTTP/1.0
Configuration
By default the CAS RESTful API is configured in the restlet-servlet.xml, which contains the routing for the tickets. It also defines the resources that will resolve the URLs. The TicketResource defined by default (which can be extended) accepts username/password.
To turn on the RESTful API, add the following to the web.xml:
<servlet> <servlet-name>restlet</servlet-name> <servlet-class>com.noelios.restlet.ext.spring.RestletFrameworkServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>restlet</servlet-name> <url-pattern>/v1/*</url-pattern> </servlet-mapping>
In the pom.xml file include the following:
<dependency> <groupId>org.jasig.cas</groupId> <artifactId>cas-server-integration-restlet</artifactId> <version>3.3-RC3</version> <type>jar</type> </dependency>
where 3.3-RC3 is the version of CAS you are currently using (3.3 or higher).