CAS ticket过期策略

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>

 

posted @ 2013-10-14 10:12  没头脑的土豆  阅读(11601)  评论(1编辑  收藏  举报