使用CAS實現單點登入
使用CAS實現單點登入
CAS官網:https://www.apereo.org/
CAS下載地址:https://github.com/apereo/cas/releases
CAS-Client下載地址:http://developer.jasig.org/cas-clients/
CAS-Server下載地址:http://developer.jasig.org/cas/
CAS-Overlay-Template下載地址:https://github.com/apereo/cas-overlay-template
CAS原理解析
演示環境
win10 64位
JDK 1.8.0_152
Tomcat 8.5.28
cas-server-4.0.0
cas-client-3.3.3
- demo.simba.com:對應部署cas server的tomcat,虛擬域名還用於證照的生成
- app1.simba.com:對應部署app1的tocmat
- app2.simba.com:對應部署app2的tocmat
安全證照配置
生成證照
開啟命令視窗,輸入下面命令:
keytool -genkey -v -alias tomcat -keyalg RSA -keypass 123456 -storepass 123456 -keystore D:/sso/keystore/mykey.keystore
- -alias tomcat:取別名為tomcat
- -keyalg RSA:指定金鑰的演算法為RSA
- -keypass 123456: 指定別名條目的密碼(私鑰的密碼)
- -storepass 123456:指定金鑰庫的密碼(獲取keystore資訊所需的密碼)
- -keystore D:/sso/keystore/mykey.keystore:生成一個名為tomcat的證照,放在D盤下的sso\keystore目錄下
執行後如圖:
D:/sso/keystore目錄下會多出一個mykey.keystore檔案
匯出證照
執行下面命令,輸入金鑰庫口令
keytool -export -trustcacerts -alias tomcat -file D:/sso/keystore/mykey.cer -keystore D:/sso/keystore/mykey.keystore
執行結果:
執行後D:/sso/keystore目錄下會多出一個mykey.cer檔案
匯入到JDK中
匯入到jdk的安裝目錄C:\Program Files (x86)\Java\jdk1.8.0_152\jre\lib\security下的cacerts檔案中
執行下面命令
keytool -import -trustcacerts -alias tomcat -file D:/sso/keystore/mykey.cer -keystore "C:\Program Files (x86)\Java\jdk1.8.0_152\jre\lib\security\cacerts"
證照新增出現錯誤,系統拒絕訪問,更改java檔案屬性的所有許可權即可
更改後如圖
檢視JDK中的證照列表,執行下面命令
keytool -list -keystore "C:\Program Files (x86)\Java\jdk1.8.0_152\jre\lib\security\cacerts"
Tomcat配置
修改tocmat解壓目錄下conf下的server.xml配置
並新增證照配置
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile="D:/sso/keystore/mykey.keystore" keystorePass="123456"
clientAuth="false" sslProtocol="TLS" URIEncoding="UTF-8">
</Connector>
CAS-Server的部署
將CAS-Server解壓目錄下modules資料夾下的cas-server-webapp-4.0.0.war拷貝到tomcat的webapps下面,並該名為cas
啟動tomcat,可以訪問到,說明部署成功
在cas/WEB-INF/deployerConfigContext.xml中有原始登入賬號和密碼,填寫賬號和密碼登入即可
登入後
CAS-Client的部署
借用tomcat預設自帶的webapps\examples作為演示簡單的web專案
安裝app1、app2倆個tomcat,修改埠,並訪問成功即可
app1的部署
將cas-client-3.3.3/modules目錄下的cas-client-core-3.3.3.jar拷貝到app1\apache-tomcat-8.5.28\webapps\examples\WEB-INF\lib目錄中
並在app1\apache-tomcat-8.5.28\webapps\examples\WEB-INF\web.xml新增
<!-- ======================== 單點登入開始 ======================== -->
<!-- 用於單點退出,該過濾器用於實現單點登出功能,可選配置-->
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<!-- 該過濾器用於實現單點登出功能,可選配置。 -->
<filter>
<filter-name>CAS Single Sign Out Filter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS Single Sign Out Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>CAS Filter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://demo.simba.com:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://app1.simba.com:18080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 該過濾器負責對Ticket的校驗工作,必須啟用它 -->
<filter>
<filter-name>CAS Validation Filter</filter-name>
<filter-class>
org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>https://demo.simba.com:8443/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://app1.simba.com:18080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Validation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
該過濾器負責實現HttpServletRequest請求的包裹,
比如允許開發者通過HttpServletRequest的getRemoteUser()方法獲得SSO登入使用者的登入名,可選配置。
-->
<filter>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<filter-class>
org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
該過濾器使得開發者可以通過org.jasig.cas.client.util.AssertionHolder來獲取使用者的登入名。
比如AssertionHolder.getAssertion().getPrincipal().getName()。
-->
<filter>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ======================== 單點登入結束 ======================== -->
啟動tomcat,發現如下錯誤
原因是缺少slf4j-api的jar包,將slf4j-api-1.7.25.jar新增到釋出專案的lib中即可
app2的部署
將cas-client-3.3.3/modules目錄下的cas-client-core-3.3.3.jar拷貝到app2\apache-tomcat-8.5.28\webapps\examples\WEB-INF\lib目錄中
並在app2\apache-tomcat-8.5.28\webapps\examples\WEB-INF\web.xml新增
<!-- ======================== 單點登入開始 ======================== -->
<!-- 用於單點退出,該過濾器用於實現單點登出功能,可選配置-->
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<!-- 該過濾器用於實現單點登出功能,可選配置。 -->
<filter>
<filter-name>CAS Single Sign Out Filter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS Single Sign Out Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>CAS Filter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://demo.simba.com:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://app2.simba.com:28080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 該過濾器負責對Ticket的校驗工作,必須啟用它 -->
<filter>
<filter-name>CAS Validation Filter</filter-name>
<filter-class>
org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>https://demo.simba.com:8443/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://app2.simba.com:28080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Validation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
該過濾器負責實現HttpServletRequest請求的包裹,
比如允許開發者通過HttpServletRequest的getRemoteUser()方法獲得SSO登入使用者的登入名,可選配置。
-->
<filter>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<filter-class>
org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
該過濾器使得開發者可以通過org.jasig.cas.client.util.AssertionHolder來獲取使用者的登入名。
比如AssertionHolder.getAssertion().getPrincipal().getName()。
-->
<filter>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ======================== 單點登入結束 ======================== -->
單點登入演示
只要登入cas-server,app1和app2能夠訪問到具體的網址
只要登出或者未登入cas-server,app1和app2必須跳轉到cas-server的登入介面
(注:該頁面是重定向,無法顯示原網址)
相關文章
- 22 CAS實現單點登入體驗
- 跨域分散式系統單點登入的實現(CAS單點登入)跨域分散式
- CAS實現單點登入SSO執行原理探究
- CAS單點登入(SSO)實戰(一)
- Liferay中使用CAS實現單點登陸(SSO)
- CAS單點登入-簡介
- CAS單點登入-基礎搭建
- CAS單點登入-https配置HTTP
- Spring Security系列教程之實現CAS單點登入上篇-概述Spring
- CAS SSO單點登入框架學習框架
- CAS實現單點登入SSO執行原理探究(終於明白了)
- 長沙Java培訓系列教程之實現CAS單點登入上篇Java
- 【實踐篇】基於CAS的單點登入實踐之路
- 採用 CAS 原理構建單點登入
- CAS 單點登入流程
- 單點登入原理與簡單實現
- java實現簡單的單點登入Java
- CAS SSO單點登入服務端環境搭建服務端
- CAS SSO單點登入客戶端環境搭建客戶端
- Casdoor + OAuth 實現單點登入 SSOOAuth
- 單點登入 SSO 的實現原理
- 改造CAS單點登入 --- 自定義登陸頁面(客戶端)客戶端
- .Net WebAPI程式整合CAS單點登入-API方式(不使用DotNetCasClient)WebAPIclient
- 手把手帶你使用JWT實現單點登入JWT
- CAS學習筆記二:CAS單點登入流程筆記
- 單點登入之cas整合sonar的配置方法詳解
- OAuth2實現單點登入SSOOAuth
- 單點登入的三種實現方式
- 什麼是單點登入?如何實現?
- 單點登陸原理及程式碼(CAS)
- 3.CAS SSO單點登入客戶端環境搭建客戶端
- 實戰模擬│單點登入 SSO 的實現
- 鬆哥手把手教你入門 Spring Boot + CAS 單點登入Spring Boot
- 單點登入CAS6-服務端自定義返回的使用者資訊服務端
- vue實現單點登入的N種方式Vue
- 記一次 SSO 單點登入實現
- mmall_v2.0 Redis + Cookie 實現單點登入RedisCookie
- 單點登入原理與技術實現比較