介紹CAS認證票的過期政策及其配置方法
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
該政策設定認證票據的有效時間段,無論使用者是否處于不活動狀态,認證票據都會過期。
<bean id="grantingTicketExpirationPolicy"
class="org.jasig.cas.ticket.support.HardTimeoutExpirationPolicy">
<constructor-arg
index="0"
value="7200000" />
</bean>
3、ThrottledUseAndTimeoutExpirationPolicy
該政策內建自TimeoutExpirationPolicy,可以配置每個票據每隔一段時間要被使用一次。可以防止惡意攻擊和誤配置引發的瞬時大量ST票據請求導緻CAS伺服器崩潰。
- 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将過期
配置示例,設定過期時間為5分鐘,票據隻允許使用一次:
<bean id="serviceTicketExpirationPolicy"
class="org.jasig.cas.ticket.support.MultiTimeUseOrTimeoutExpirationPolicy">
<constructor-arg
index="0"
value="1" />
<constructor-arg
index="1"
value="300000" />
</bean>