天天看點

史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定

目錄

  • Cas-Server搭建
      • 大浪淘沙,沉者為金
      • 弱水三千,隻取一瓢
  • 服務端配置介紹
      • 最常用的三個配置檔案
      • 最常用的三個JSP頁面
  • 自定義資料源
  • 關閉HTTPS協定
  • 開啟Restful接口
      • 1、加入jar包。
      • 2、配置web.xml
      • 3、測試Ticket機制。
  • 使用HTTPS協定
      • 治标
      • 治本

Cas-Server搭建

大浪淘沙,沉者為金

Cas-Server官網:

https://github.com/apereo/cas

進入官網,可以看到版本有很多,主要差別為:

3.x:web版本

4.x:maven版本

5.x:gradle版本

一般4.x用的比較多。

史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定

高版本:

自己打包的話,指令為:

build.cmd run
	  mvn clean package
	  build package
           
史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定

弱水三千,隻取一瓢

下載下傳好後,打開發現檔案非常多。

都不要去看,直接找到module目錄下的cas-server-webapp-4.0.0.war。

将war包放到一個幹淨的Tomcat中(以後出錯,可以排除tomcat本身問題報錯)。

Tomcat官網:

https://tomcat.apache.org/

史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定
史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定
史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定

服務端配置介紹

史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定

最常用的三個配置檔案

deployerConfigContext.xml

1、檔案裡有内置使用者casuser/Mellon,搜尋Bean:primaryAuthenticationHandler,即可找到。不使用自己的資料庫,直接登入。

2、自定義資料源。

3、關閉https協定。

cas.properties

1、ticket命名。

2、資料源。

web.xml

1、開啟restful接口。

·························································································

最常用的三個JSP頁面

最常修改的三個JSP頁面,登入界面,登入成功界面,退出界面。

說的牛逼一點,就是自定義認證界面,自定義登出界面。

casLoginView.jsp

路徑:cas\WEB-INF\view\jsp\default\ui\casLoginView.jsp

Cas認證登入界面。修改登入界面就是修改這個檔案。

casGenericSuccess.jsp

路徑:\cas\WEB-INF\view\jsp\default\ui\casGenericSuccess.jsp

路徑根據版本不同,是不一樣的,但是檔案名稱是一樣的。

使用者認證通過進入的頁面。

casLogoutView.jsp

路徑:\cas\WEB-INF\view\jsp\default\ui\casLogoutView.jsp

退出Cas-Server時,進入的頁面。

自定義資料源

1、修改Bean,primaryAuthenticationHandler。

原先這個是内置使用者,将它替換為下邊。

<bean id="primaryAuthenticationHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
                <property name="dataSource" ref="dataSource" />
                <property name="sql" value="select pwd_  from os_user where USER_NO_ = ?" />
                <property name="passwordEncoder" ref="passwordEncoder"></property>
     </bean>
           

2、增加Bean,passwordEncoder與dataSource。

<!--配置加密器,如果使用者表的密碼是使用MD5加密的,就加上這個。
如果使用了其他的加密手段,也可以自定義加密器類,然後注入即可。-->
<bean id="passwordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"
	c:encodingAlgorithm="MD5"
	p:characterEncoding="UTF-8" />
	
	  
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
  p:driverClass="com.mysql.jdbc.Driver"
  p:jdbcUrl="jdbc:mysql://localhost:3306/realry?characterEncoding=utf8"
  p:user="root"
  p:password="root"/>
           

3、加入jar包。

史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定

關閉HTTPS協定

看下邊四個連結,都是https開頭的。

https://blog.csdn.net/

https://account.aliyun.com/

https://www.jd.com/

https://www.taobao.com/

厲害一點的網站都是https,注重保密。

我們不厲害,是以我們關掉它,不使用HTTPS協定。

1、deployerConfigContext.xml檔案,修改為false。

<bean id="proxyAuthenticationHandler"
				  class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
				  p:httpClient-ref="httpClient" p:requireSecure="false" />
           

2、deployerConfigContext.xml檔案,p:serviceId增加http(不加不會報錯,6.x版本要求加上)。

<bean class="org.jasig.cas.services.RegexRegisteredService"
					  p:id="0" p:name="HTTP and IMAP" p:description="Allows HTTP(S) and IMAP(S) protocols"
					  p:serviceId="^(https?|imaps?|http?)://.*" p:evaluationOrder="10000001" />
           

3、ticketGrantingTicketCookieGenerator.xml檔案,修改為false。

<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
				p:cookieSecure="false"
				p:cookieMaxAge="-1"
				p:cookieName="CASTGC"
				p:cookiePath="/cas" />
           

4、warnCookieGenerator.xml檔案,修改為false。

<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
				p:cookieSecure="false"
				p:cookieMaxAge="-1"
				p:cookieName="CASPRIVACY"
				p:cookiePath="/cas" />
           

開啟Restful接口

Cas認證支援很多種協定去認證,比如OAuth、SAML1、SAML2等協定,最常用的為REST協定擷取TGT,TGT産生ST,通過ST與TGC去通路服務端驗證。是以我們要給cas-server開啟restful接口。

1、加入jar包。

看你是什麼項目。

maven項目引入依賴:

<dependency>
    <groupId>org.jasig.cas</groupId>
    <artifactId>cas-server-integration-restlet</artifactId>
    <version>4.0.0</version>
</dependency>
           

web項目找jar包的方法:

https://blog.csdn.net/numbbe/article/details/112197426

史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定

2、配置web.xml

<servlet>
        <servlet-name>restlet</servlet-name>
        <servlet-class>org.restlet.ext.spring.RestletFrameworkServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
  </servlet>
      
  <servlet-mapping>
        <servlet-name>restlet</servlet-name>
        <url-pattern>/v1/*</url-pattern>
  </servlet-mapping>
           

不加入這段配置,通路會報404錯誤。

史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定

3、測試Ticket機制。

直接使用浏覽器通路:http://localhost:8080/cas/v1/tickets。

出現Method Not Allowed,你就成功的開啟了Restful接口。

相反,如果你一直顯示認證界面或者登陸成功界面,你就是沒有開啟,前兩步操作有誤。

具體情況可以參考:

https://blog.csdn.net/numbbe/article/details/112213089

另外Ticket機制,參考這篇文章:

https://blog.csdn.net/numbbe/article/details/112150306

史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定

1、擷取TGT。

史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定
http://localhost:8080/cas/v1/tickets	POST

username=admin&password=1 

響應碼	201
傳回值  TGT

           

2、擷取ST。

史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定
http://localhost:8080/cas/v1/tickets/{上一步驟的TGTID}	POST

service=localhost:8020	目标用戶端位址

響應碼	200
傳回值  ST

           

3、驗證ST。

史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定
http://localhost:8080/cas/serviceValidate	POST

service=localhost:8020	ticket=ST-1-5CAuRHk7XLiPwKRAeZAx-xiaolaoben

響應碼	200
傳回值  username

           

使用HTTPS協定

當我們正常通路cas-server時,經常看到一個警告。

翻譯一下就是:讓你使用HTTPS協定進行單點登入。

史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定
史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定
史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定

治标

對于某些強迫症患者來說,不喜歡warning,可以用一個非常簡單的方法。

進入casLoginView.jsp頁面,将這段話删掉就好了,不用管什麼HTTPS協定。

當然,這是治标不治本。

史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定

治本

既然Cas讓我們使用HTTPS,那我們使用HTTPS好了。

首先,知道兩個問題。

1、HTTP與HTTPS的差別
		我們自己在本地啟動的服務,比如tomcat,kibana,rabbitmq全部都是http協定。
		HTTPS證書需要花錢買,有免費的,但是免費的HTTPS證書有以下三個缺點:
		1、相容浏覽器較少,且安全性較低,形同虛設。
		2、隻能保護一個域名,不支援通配符域名、多域名等。
		3、有效期很短,需要你重複申請。
		
		HTTPS=HTTP+SSL
		SSL是用于對HTTP傳輸的資料進行加密的協定。
		HTTP傳輸的資料都是未加密的,HTTPS傳輸的資料都是加密的。
2、為什麼使用域名
		在做單點登入的過程中,經常讓你使用域名進行回調用戶端位址。
		1、cas-server是部署在獨立伺服器上的,你在用戶端伺服器寫一個localhost,cas-server回調下級系統時,這個localhost相對于cas-server就是單點登入伺服器本機,而不是用戶端的localhost。
		2、為什麼鋼筆叫鋼筆,鉛筆叫鉛筆,為什麼使用域名,規定讓你用,你就用,牽一發而動全身。
		3、安全證書是與域名綁定的,你寫ip位址,證書不認識,會報No subject alternative names present錯誤。
		

           

證書是單點登入認證系統中很重要的一把鑰匙,證書能極大的提高用戶端與伺服器的互動安全。在這裡使用keytool工具生成證書,JDK自帶工具。

keytool工具說明:

http://www.micmiu.com/lang/java/keytool-start-guide/

1、修改本地域名,進入C:\Windows\System32\drivers\etc,修改hosts檔案。

127.0.0.1  cas.server.com   
		127.0.0.1  cas.client1.com
		127.0.0.1  cas.client2.com
           

2、服務端證書,進入你的cas-server的Tomcat目錄中,cmd依次執行指令。

最終會生成三個檔案,如圖:

史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定
1、生成伺服器的密匙檔案(casserver.keystore)

keytool -genkey -alias casserver -keypass cas123 -keyalg RSA -keystore casserver.keystore -validity 365
				-alias指定别名為casserver;

				-keyalg指定RSA算法;

				-keypass指定私鑰密碼;

				-keystore指定密鑰檔案名稱為casserver.keystore;

				-validity指定有效期為365天。
				
2.生成服務端證書(casserver.cer)
			
keytool -export -alias casserver -storepass cas123 -file casserver.cer -keystore casserver.keystore
				-alias指定别名為casserver;

				-storepass指定私鑰密碼;

				-file指定導出證書的檔案名為casserver.cer;

				-keystore指定之前生成的密鑰檔案的檔案名。
				
3、伺服器的證書casserver.cer導入到cacerts密鑰庫檔案中(cacerts檔案)
			
keytool -import -trustcacerts -alias casserver -storepass cas123 -file casserver.cer –keystore cacerts
				

           
史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定
史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定
史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定

3、用戶端證書,進入你的環境變量的JDK目錄jdk/jre/lib/security目錄(cacerts檔案)

keytool -import -trustcacerts -alias casclient -storepass changeit -file C:\Users\admin\Desktop\apache-tomcat-8.5.61\casserver.cer -keystore cacerts

           
史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定

4、配置cas-server的server.xml檔案,把之前的8080端口删掉,加上下邊這段,開啟HTTPS通路。

其中keystoreFile為你的證書位址,keystorePass你的證書密碼。

<Connector port="8080" protocol="HTTP/1.1"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
			   clientAuth="false" sslProtocol="TLS"
			   keystoreFile="C:\Users\admin\Desktop\apache-tomcat-8.5.61\casserver.keystore"
			   keystorePass="cas123">
    </Connector>
           

5、配置cas-server,打開HTTPS協定,上邊有關閉HTTPS協定的步驟,這邊就反着來就行了。

之後通過https協定通路,就可以看到沒有了warning,不會再說不安全了。

史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定

Tips:

有時候,你會碰到這樣的情況,總是報不安全之類的,點選進階然後點進去就行了。

史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定

取消方法為:

1、将你上邊生成的安全證書導入你使用的谷歌浏覽器或者EDGE浏覽器就可以了。

2、你的安全證書除了用于導入,還可以直接輕按兩下安裝。

史上最強,Cas單點登入之服務端搭建Cas-Server搭建服務端配置介紹自定義資料源關閉HTTPS協定開啟Restful接口使用HTTPS協定

繼續閱讀