As a general principal, each cluster should take care of its own clustering. If your CAS Server is clustered, it handles anything affected by the fact that you have more than one CAS Server (i.e. use a clustered version of your ticket caches). When a CAS client is clustered, then the client machines should manage any of their own cluster-specific logic. The server shouldn't care (because it is viewing the cluster as a single machine, which is what you want... the CAS Server is an external actor compared to the cluster and should view the cluster as a black box).
We use a custom C++ ISAPI client and a customized version of the older 2.1.x Java CAS client. I've also played around with one of the clients in the 3.x range, but we're not using that in production currently. I've used two methods for a cluster-aware single sign-out CAS client: 1) If your user session state is already clustered (standard practice with Tomcat or most other Java app servers), you just make sure that the CAS Client's single log-out (SLO) code will result in the session being invalidated or cleared. Do this on one node and it will become true on all nodes by nature of the clustered session. We're not using the latest CAS Client, so I don't personally know how its SLO features work internally. 2) Configure each client in the cluster to re-broadcast the SLO command to the other nodes in the cluster. I've done this with another servlet filter that sits in front of the standard CAS servlet filter. All nodes are configured identically with the internal addresses for all nodes, and the one that receives the command just loops through the list (skipping over itself). An extra parameter (or something) should be included to tell the other node not to rebroadcast again, avoiding an endless loop. Another possibility, if all of your clients and server exist on a single domain, is to have the CAS server create a domain cookie that acts as a SLO command. (Using a domain cookie for login is less secure than the standard CAS protocol, but using it for logout shouldn't introduce any practical vulnerabilities.) I haven't actually implemented this mechanism, but I think it could work very effectively. -Nathan From: Bryan Wooten [mailto:[email protected]] Sent: Friday, July 09, 2010 12:39 PM To: [email protected] Subject: RE: [cas-user] useSession=false problem Nathan, Your assessment is 100% correct. We really do require single sign out. We have to assume that all our applications will be accessed from public terminals. We must do our best to protect our users from themselves. There is no real way to train 30,000 students... May I ask how you got single sign out to work in a load balanced environment and which client you used? From what I know about single sign out, making it work in a load balanced situation is a CAS server side problem and not a CAS client issue. Cheers, Bryan Wooten [email protected] Work: 801.585.9323 Cell: 801.414.3593 From: Nathan Kopp [mailto:[email protected]] Sent: Friday, July 09, 2010 9:56 AM To: [email protected] Subject: RE: [cas-user] useSession=false problem First, it is possible to use single logout behind a load balancer (we do it for a number of our critical applications), but it depends on the CAS client implementation. (Not all clients support single logout, and those that support it don't always work in a cluster.) It really seems that single logout is a requirement for your implementation, so I would pursue that route. Many implementations assume that the user is using a private machine or that users can be trained to shut down all browser windows (to ensure single logout) before allowing someone else to use the computer. If these are not true of your situation, you will want to enforce a policy that all CAS clients be configured to support single logout. In our environment, we use single logout for most critical applications, but we also rely on private workstations and users closing browser windows for other applications. It would probably not be a good idea to disable local application sessions completely. Applications would probably not behave as expected. You could implement a back-channel callback for CAS clients to re-check the state of the user's server session, but this would require custom code in both the client and server and it would probably severely impact system performance due to increased network traffic. There are other single logout strategies that could be used (e.g. use a domain cookie indicate session state to clients within the server's domain), but they all would require code changes to the CAS server and clients. -Nathan From: Bryan Wooten [mailto:[email protected]] Sent: Friday, July 09, 2010 11:23 AM To: [email protected] Subject: RE: [cas-user] useSession=false problem Ok, sorry if this gets a bit long winded. The behavior I will describe below is causing one of our developers to scream, "Security Holes!". So I am doing my best mitigate his concerns and along the way I am trying to gain a deep understanding of the ins and outs of the CAS Client and Server. So here is the scenario, 2 users and 2 applications, using a Firefox browser. I access application 1 as user 1 and get redirected to CAS login. After login I can use application 1. Now I browse to the CAS logout URL and it says I am successfully logged out. Except as we know, I am not really logged out of application 1 (single sign is disabled for all applications because we are behind a load balancer). So here is the first "Security Hole", the user can still access the application without being asked to log in again. Now if I try to access application 2, I will be asked to login in again. So I login as user 2 and use application 2. Now here is the second "Security Hole". In application 1 I am still known as user 1 and in application 2 I am know as user 2. The developer feels that the second login should mean that application 1 should now see me as user 2. I believe all this is explained by the behavior of JSESSION IDs since each application gets its own jsession (but I could be way off on this assessment) I have no clue what would happen if I introduced a 3rd application into the mix. If I hit the 3rd application which login would it recognize? I am trying to find a way to make my applications always go back to the CAS server to see if the user has logged out via the CAS logout URL. I don't know if this is even possible without custom code. I am open to writing my own custom filter or modifying the CAS client itself. I was hoping some combination of renew = true or useSession=false would accomplish this. I have tried various combination of renew=true and useSession=false and different filter ordering, none of which I can get to work. So at this point I am planning on diving head first into the client code and figure out exactly what the parameters do and how they work. I also recognize that our applications should all have "logout" buttons or links that would allow us to invalidate the session and log that application out of CAS. I won't bore you will the politics of the logout button. Sigh. Thanks, Bryan Wooten [email protected] Work: 801.585.9323 Cell: 801.414.3593 From: Scott Battaglia [mailto:[email protected]] Sent: Thursday, July 08, 2010 7:50 PM To: [email protected] Subject: Re: [cas-user] useSession=false problem What order do you have the filters in? Also, is there a reason you don't need sessions? On Thu, Jul 8, 2010 at 1:26 PM, Bryan Wooten <[email protected]<mailto:[email protected]>> wrote: When I set useSession=false in the Cas20ProxyReceivingTicketValidationFilter I get this after I : Firefox has detected that the server is redirecting the request for this address in a way that will never complete. If I set renew=true in conjunction with use=Session= false I can never get off the CAS login page. Any ideas? Thanks, Bryan Wooten [email protected]<mailto:[email protected]> Work: 801.585.9323 Cell: 801.414.3593 -- You are currently subscribed to [email protected]<mailto:[email protected]> as: [email protected]<mailto:[email protected]> To unsubscribe, change settings or access archives, see http://www.ja-sig.org/wiki/display/JSG/cas-user -- You are currently subscribed to [email protected] as: [email protected] To unsubscribe, change settings or access archives, see http://www.ja-sig.org/wiki/display/JSG/cas-user -- You are currently subscribed to [email protected] as: [email protected] To unsubscribe, change settings or access archives, see http://www.ja-sig.org/wiki/display/JSG/cas-user -- You are currently subscribed to [email protected] as: [email protected] To unsubscribe, change settings or access archives, see http://www.ja-sig.org/wiki/display/JSG/cas-user -- You are currently subscribed to [email protected] as: [email protected] To unsubscribe, change settings or access archives, see http://www.ja-sig.org/wiki/display/JSG/cas-user -- You are currently subscribed to [email protected] as: [email protected] To unsubscribe, change settings or access archives, see http://www.ja-sig.org/wiki/display/JSG/cas-user
