單點登入CAS使用記:關於伺服器超時以及客戶端超時的分析
我的預想情況
一般情況下,當用戶登入一個站點後,如果長時間沒有發生任何動作,當用戶再次點選時,會被強制登出並且跳轉到登入頁面,
提醒使用者重新登入。現在我已經為站點整合了CAS,並且已經實現了單點登入以及單點登出,那麼當用戶使用過程中,發生了超時的情況,
估計也是自動的強行登出了吧,而且可能其他部署了Cas的站點也跟著自動登出了。
我是這麼猜想的。
那麼實際情況到底是什麼樣的
首先先列出我自己開發過程中的遇到的一系列疑問:
3.Cas-Client與Cas-Server超時時間分別該怎麼設定才比較好?
下面來驗證一下實際情況
1.Cas-Client超時後發生了什麼?
Cas-Client客戶端其實不需要額外做超時的配置,因為是在原有專案的web.xml中配置,說白了就是原專案的一部分,
所以以原專案設定的超時時間為準。
一般情況都是在web.xml中這麼設定的:
<session-config> <session-timeout>120</session-timeout> </session-config>
驗證方法:
事前準備:
1.把webApp1的超時時間設定為1分鐘,webApp2不做修改,超時時間為2小時,CAS-Server預設超時時間也是2小時
2.啟動CAS-Server、webApp1、webApp2
3.分別登入webApp1、webApp2
驗證動作:
2分鐘後,我優先點選webApp1的網頁,彷彿沒有發生任何與超時相關的處理,依然可以正常訪問所有頁面。並沒有強制跳轉到登入頁。我再點選webApp2的網頁,也可以正常瀏覽。
又過了2分鐘,我優先點選webApp2的網頁,可以正常訪問。再次點選webApp1,也可以正常訪問。
驗證結果:
1.webApp1雖然超時了,但是並沒有被強制登出,依然可以正常訪問。
2.webApp2完全沒有受到webApp1的超時影響,也可以正常訪問。
原因分析:
...編寫中
2.Cas-Server超時後發生了什麼?
cas服務端超時應該主要指的是TGT(ticket granting ticket)超時,如果TGT時間到期,則需要進行重新登入。這裡時間單位是毫秒,預設是兩小時。
ticketExpirationPolicies.xml
<bean id="grantingTicketExpirationPolicy" class="org.jasig.cas.ticket.support.TimeoutExpirationPolicy"> <!-- This argument is the time a ticket can exist before its considered expired. --> <constructor-arg index="0" value="7200000" /> </bean>
驗證方法:
事前準備:
1.CAS-Server預設超時時間也是2分鐘,webApp1的超時時間設定為5分鐘、webApp2的超時時間設定為10分鐘。
2.啟動CAS-Server、webApp1、webApp2
3.分別登入webApp1、webApp2
驗證動作:
3分鐘後,CAS-Server應該已經超時了,這時我訪問webApp1,可以正常訪問。訪問webApp2,也可以正常訪問。
6分鐘後,CAS-server與webApp1應該都超時了,這時訪問webApp1,頁面被強制重定向到登入頁面了。再訪問webApp2,發現仍然可以正常訪問。
11分鐘後,webApp2頁超時了,這時訪問webApp2,頁面就被重定向到登入頁面了。
驗證結果:
1.CAS-Server的TGT超時,並不會影響到頁面的正常訪問,也就是說TGT超時後,並沒有主動的銷燬客戶端的Session。
2.只有當TGT超時後,並且客戶端也超時了,這時候客戶端才會主動向Cas-Server重新發起請求認證,然後發現TGT超時了,所以重定向回登入頁面。
3.一個客戶端超時並不會影響其他客戶端的正常訪問。
原因分析:
...編寫中
3.Cas-Client與Cas-Server超時時間分別該怎麼設定才比較好?
從以上兩個驗證可以發現,一旦客戶端通過了CAS-Server認證後,客戶端就相當於完全獨立了,即使再訪問客戶端的頁面,客戶端與CAS-Server之間也不在發生任何互動或者驗證動作。
一直到客戶端強制登出或者超時後,才會主動發起認證請求,CAS-Server才會被動的處理請求,判斷是需要重定向還是重新認證通過。
也就是說,如果服務端超時時間設定的過短,並不會起作用,還是要等客戶端超時後才行。
鑑於以上,客戶端與服務端的超時時間應該設定為:
CAS-Server(TGT)超時時間 >= Cas-Client的超時時間
4.一個站點超時,其他站點集中被登出了嗎?
從之前的驗證來看,一個站點超時,並不影響其他站點的正常訪問。