CAS提供可擴展的ticket過期策略,支持ticket-granting tickets (TGT)和service tickets (ST)的配置。
CAS客戶端存儲用戶信息一般使用session,因此客戶端用戶登錄過期時間應該還取決於客戶端session的過期時間。
一、TGT的過期策略
1、TimeoutExpirationPolicy
CAS默認使用該策略作為TGT的過期策略,該策略與session的過期策略類似,超過設定的時間需要用戶重新登錄獲取認證票據。
該策略支持參數
- timeToKillInMilliSeconds:最大空閑時間(用戶處於不活動狀態),以毫秒為單位
配置示例,設置過期時間為2小時:
<bean id="grantingTicketExpirationPolicy" class="org.jasig.cas.ticket.support.TimeoutExpirationPolicy"> <constructor-arg index="0" value="7200000" /> </bean>
2、HardTimeoutExpirationPolicy
該策略設置認證票據的有效時間段,無論用戶是否處於不活動狀態,認證票據都會過期。
該策略支持參數
- timeToKillInMilliSeconds:最大空閑時間(用戶處於不活動狀態),以毫秒為單位
配置示例,設置過期時間為2小時:
<bean id="grantingTicketExpirationPolicy" class="org.jasig.cas.ticket.support.HardTimeoutExpirationPolicy"> <constructor-arg index="0" value="7200000" /> </bean>
3、ThrottledUseAndTimeoutExpirationPolicy
該策略集成自TimeoutExpirationPolicy,可以配置每個票據每隔一段時間要被使用一次。可以防止惡意攻擊和誤配置引發的瞬時大量ST票據請求導致CAS服務器崩潰。
該策略支持參數
- timeToKillInMilliSeconds:最大空閑時間(用戶處於不活動狀態),以毫秒為單位
- timeInBetweenUsesInMilliSeconds:連續使用票據的最小時間,以毫秒為單位
配置示例,設置過期時間為3小時,連續使用票據的最小時間設置為5秒:
<bean id="grantingTicketExpirationPolicy" class="org.jasig.cas.ticket.support.ThrottledUseAndTimeoutExpirationPolicy" p:timeToKillInMilliSeconds="10800000" p:timeInBetweenUsesInMilliSeconds="5000" />
4、NeverExpiresExpirationPolicy
認證票據永不過期。配置示例如下:
<bean id="grantingTicketExpirationPolicy" class="org.jasig.cas.ticket.support.NeverExpiresExpirationPolicy" />
5、RememberMeDelegatingExpirationPolicy
登錄時可以設置記住用戶,用戶下次訪問CAS時不需要再次登錄。該策略在CAS 3.2.1之后的版本才支持,需要配置如下:
1)AuthenticationManager需要增加AuthenticationMetaDataPopulator的配置
<property name="authenticationMetaDataPopulators"> <list> <bean class="org.jasig.cas.authentication.principal.RememberMeAuthenticationMetaDataPopulator" /> </list> </property>
2)修改登錄流程
login-webflow.xml
定位credentials var節點,原始配置如下:
<var name="credentials" class="org.jasig.cas.authentication.principal.UsernamePasswordCredentials" />
將其修改為:
<var name="credentials" class="org.jasig.cas.authentication.principal.RememberMeUsernamePasswordCredentials" />
定位viewLoginForm bean,原始配置可能是:
<view-state id="viewLoginForm" view="casLoginView" model="credentials"> <binder> <binding property="username" /> <binding property="password" /> </binder> <on-entry> <set name="viewScope.commandName" value="'credentials'" /> </on-entry> <transition on="submit" bind="true" validate="true" to="realSubmit"> <evaluate expression="authenticationViaFormAction.doBind(flowRequestContext, flowScope.credentials)" /> </transition> </view-state>
修改為:
<view-state id="viewLoginForm" view="casLoginView" model="credentials"> <binder> <binding property="username" /> <binding property="password" /> <binding property="rememberMe" /> </binder> <on-entry> <set name="viewScope.commandName" value="'credentials'" /> </on-entry> <transition on="submit" bind="true" validate="true" to="realSubmit"> <evaluate expression="authenticationViaFormAction.doBind(flowRequestContext, flowScope.credentials)" /> </transition> </view-state>
3)修改ticket過期策略
ticketExpirationPolicies.xml
<bean id="grantingTicketExpirationPolicy" class="org.jasig.cas.ticket.support.RememberMeDelegatingExpirationPolicy"> <property name="sessionExpirationPolicy"> <bean class="org.jasig.cas.ticket.support.TimeoutExpirationPolicy"> <constructor-arg index="0" value="XXXXXXXX" /> </bean> </property> <property name="rememberMeExpirationPolicy"> <bean class="org.jasig.cas.ticket.support.TimeoutExpirationPolicy"> <constructor-arg index="0" value="XXXXXXXX" /> </bean> </property> </bean>
二、ST的過期策略
MultiTimeUseOrTimeoutExpirationPolicy:默認策略,可以設置用戶空閑時間最大值或票證使用次數最大值。
該策略支持參數
- numberOfUses:票證最大使用次數,超過此次數,ST將過期
- timeToKillInMilliSeconds:最大空閑時間(用戶處於不活動狀態),以毫秒為單位
配置示例,設置過期時間為5分鍾,票據只允許使用一次:
<bean id="serviceTicketExpirationPolicy" class="org.jasig.cas.ticket.support.MultiTimeUseOrTimeoutExpirationPolicy"> <constructor-arg index="0" value="1" /> <constructor-arg index="1" value="300000" /> </bean>
