1. 程式人生 > >CAS Server 單點登入SSO 認證服務搭建部署

CAS Server 單點登入SSO 認證服務搭建部署

部署環境

1 下載CAS Server 4.0 :https://github.com/apereo/cas/releases/tag/v4.0.0 

   這裡選擇4.0是因為其有官方release版本的cas-server-webapp-4.0.0.war。其他版本需要下載原始碼手動打包。

2 JDK 1.8.111 。注意環境變數配置:JAVA_HOME是指向哪個jdk路徑,因為CAS Server是war包,用tomcat啟動,tomcat通過JAVA_HOME尋找JDK。

3 TomCat 7.0.92 win64 。測試用過TomCat  8.5 出現404,cas-server配置完禁用https後,訪問

http://localhost:8080/cas/login總是報404,換  TomCat 7就可以正常訪問。可能是8.5的預設配置有調整?

安裝cas-server

下載CAS Server 4.0 :https://github.com/apereo/cas/releases/tag/v4.0.0 。解壓縮下載下來的“cas-server-4.0.0-release.zip” 
在“modules”資料夾中找到“cas-server-webapp-4.0.0.war”,將其重新命名為“cas.war”,在將“cas.war”拷貝到TomCat 7.0.92的“\webapps”資料夾下。稍等一會兒重新整理一下,就會看到Tomcat自動將“cas.war”解壓到“cas”資料夾中

CAS禁用HTTPS,設定Cookie過期時間

若安全級別不高,不需要證書,可以選擇禁用https啟用http訪問。

cas-server是基於spring開發的,其配置為spring-bean配置檔案

在上一步解壓“cas”資料夾中修改:

1.WEB-INF/deployerConfigContext.xml中增加引數 p:requireSecure="false" ,是否需要安全驗證,即 HTTPS,false 為不採用 如下:< bean class = "org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" 

p:httpClient-ref = "httpClient" p:requireSecure= "false" />

2. WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml中將p:cookieSecure="true"修改為 p:cookieSecure="false" 禁用httpsp:cookieMaxAge 為過期時間,-1為瀏覽器關閉後失效。

3. WEB-INF/spring-configuration/warnCookieGenerator.xml中將p:cookieSecure="true"改為 p:cookieSecure="false" 禁用httpsp:cookieMaxAge 為過期時間,-1為瀏覽器關閉後失效。

 

啟動tomcat測試

win環境下雙擊TomCat 7.0.92\bin\startup.bat,Tomcat預設是8080埠,訪問http://localhost:8080/cas/login,正常情況是CAS的官方登入頁面。

若修改Tomcat的埠,必須要改CAS伺服器的配置\WEB-INF\cas.properties的server.name

請手動輸入賬號與密碼,預設賬號:casuser,密碼:Mellon; 如果使用者名稱與密碼相同,系統也顯示登入成功;

圖中Non-secure提醒因為禁用了HTTPS 

使用startup.bat啟動tomcat,可以檢視cas-server的控制檯資訊。

https://blog.csdn.net/shanchahua123456/article/details/85570647

控制檯資訊:

測試環境是通過NGINX(:80)代理localhost:8787服務,localhost:8787專案配置了通用字首/b,所以其根地址為localhost:8787/b。 

 

服務端資料來源設定 

配置資料來源,讓CAS伺服器到資料庫中查詢使用者名稱密碼做登入認證。

(1)修改 cas 服務端中 web-inf 下 deployerConfigContext.xml ,新增如下配置

<!--認證密碼查詢-->
<bean id="dbAuthHandler"
class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"
p:dataSource-ref="dataSource"
p:sql="select password from tb_user where username = ?"
p:passwordEncoder-ref="passwordEncoder"/>

<!--配置資料來源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
p:driverClass="com.mysql.jdbc.Driver"
p:jdbcUrl="jdbc:mysql://127.0.0.1:3306/casdb?characterEncoding=utf8"
p:user="root"
p:password="root" />

<!--密碼的解碼格式-->
<!--CAS也支援已定義encoder,實現org.jasig.cas.authentication.handler.PasswordEncoder介面-->
<bean id="passwordEncoder"
class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"
c:encodingAlgorithm="MD5"
p:characterEncoding="UTF-8" />

然後在配置檔案開始部分找到如下配置,新增上面配置的dbAuthHandler

<bean id="authenticationManager" class="org.jasig.cas.authentication.PolicyBasedAuthenticationManager">
    <constructor-arg>
        <map>
        <entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />
        <!--新增自己配置的DB源查詢-->
        <entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver"/>
        <!--預設的primaryPrincipalResolver可以註釋掉-->
        <!--<entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver"/>-->          
        </map>
    </constructor-arg>

    <property name="authenticationPolicy">
        <bean class="org.jasig.cas.authentication.AnyAuthenticationPolicy" />
    </property>
</bean>

(2)將以下三個 jar 放入 webapps\cas\WEB-INF\lib 下

cas-server-support-jdbc-4.0.0.jar(在“cas-server-4.0.0-release.zip” 的“modules”資料夾中), mysql-connector-java-5.1.32.jar,c3p0-0.9.1.2.jar

國際化

修改WEB-INF\spring-configuration\applicationContext.xml,將國際化配置檔案切換為漢語

  <util:list id="basenames">
        <value>classpath:custom_messages</value>
        <value>classpath:messages_zh_CN</value>
    </util:list>

自定義登入頁面

預設統一使用的是CAS提供的登入頁面。其路徑是Cas-Server專案下\WEB-INF\view\jsp\default\ui\casLoginView.jsp 和 \WEB-INF\view\jsp\default\ui\includes\top.jsp。

將自己的js、css、image放到Cas-Server專案主目錄的js、images、css 資料夾中。

修改:將原登入頁面的樣式/文字修改

替換:可以將自己的同名登入頁面覆蓋原頁面casLoginView.jsp,

注意替換的登入頁,要包含原登入頁的主要表單元素和引用的js,jsp等標籤