from:http://www.javaeye.com/topic/21770?page=3
CAS用來標志用戶的token是存在它自己的域名下的,不是存在web應用的域名下的.CAS判斷用戶登錄由agent決定,agent驗證用戶信息有兩種處理.
1.如果這個用戶是以前沒登錄過的,也就是說這個web應用的域名下沒有一個agent頒發的sessionid(在cookie里)的話,那么它會跳轉到CAS server的登錄界面(這里由CAS server決定是否顯示登錄界面,還是直接就跳轉回來,也就是不是每次都要求輸入密碼登錄的).
2.CAS的登錄界面會有兩種處理.如果以前沒登錄過,也就是在CAS server自己的域名下,沒有用戶的token的話,就要求登錄.如果有token的話,就返回一個ticket(也就是不顯示登錄界面直接重定向返回了).
然后接第一步里面,agent收到ticket以后就提交給CAS server驗證,并取得返回信息(是個xml,cas的協議規定的,也可以用saml之類的,這個地方可以取得除了用戶姓名以外的信息,這樣就可以做同步了,權限的問題可以這么解決).然后agent就保存此時的session,把sessionid放到該web應用域名下的cookie里.
以上邏輯說明了,標志用戶身份的token在CAS server的域名下,每個web應用不保存用戶身份.因此跨域是絕對沒問題的.只是single sign off就需要CAS server的配合了,要把那個token刪掉.
不過如果標志身份的token不存在,而sessionid存在,那還是被認為是登錄的,只不過是在等待那個session timeout而已.
Let life be beautiful like summer flowers and death like autumn leaves.