CAS ticket過期策略


介紹

CAS

CAS 是Yale(耶魯)大學的一個開源的企業級單點登錄系統,它的特點:

  • Java (Spring Webflow/Spring Boot) 服務組件
  • 可插拔身份驗證支持(LDAP,Database,X.509,MFA)
  • 支持多種協議(CAS,SAML,OAuth,OpenID,OIDC)
  • 跨平台客戶端支持(Java,.Net,PHP,Perl,Apache等)
  • 與uPortal,Liferay,BlueSocket,Moodle,Google Apps等集成

認證原理:如果系統發現沒有通過CAS認證的話,會重定向到CAS認證,CAS認證通過之后,會把COOKIE的信息寫入到auth_cas.conf中配置的CASCookiePath目錄里,然后再代理到相應的地址,同時增加名為REMOTE_USER的header,應用里邊只需要通過這個header找到相應的用戶,讓相應的用戶登錄即可

為什么會記錄這篇文章,因為我們學校網站的就是用的這套系統,APACHE的的MOD_AUTH_CAS模塊,講道理,這個認證系統真心牛,單點登錄機制,在多個應用系統中,只需要登錄一次,金智教育的網頁學習平台上獲取的tickets在今日校園APP上也可以使用,看了一下APP的簡介,果不其然 也是金智教育出品。重點在這里,在學校網站上登錄后抓到的ticket也可以登錄今日校園APP

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,原始配置可能是:

[復制代碼](javascript:void(0)😉

<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>

[復制代碼](javascript:void(0)😉

修改為:

[復制代碼](javascript:void(0)😉

<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>

[復制代碼](javascript:void(0)😉

3)修改ticket過期策略

ticketExpirationPolicies.xml

[復制代碼](javascript:void(0)😉

<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>

[復制代碼](javascript:void(0)😉

二、ST的過期策略

MultiTimeUseOrTimeoutExpirationPolicy:默認策略,可以設置用戶空閑時間最大值或票證使用次數最大值。

該策略支持參數

  • numberOfUses:票證最大使用次數,超過此次數,ST將過期
  • timeToKillInMilliSeconds:最大空閑時間(用戶處於不活動狀態),以毫秒為單位

配置示例,設置過期時間為5分鍾,票據只允許使用一次:

[復制代碼](javascript:void(0)😉

<bean id="serviceTicketExpirationPolicy"
    class="org.jasig.cas.ticket.support.MultiTimeUseOrTimeoutExpirationPolicy">
    <constructor-arg
        index="0"
        value="1" />
    <constructor-arg
        index="1"
        value="300000" />
</bean>

[復制代碼](javascript:void(0)😉


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM