CAS服務端入門使用實踐
一、前言
1.簡介
CAS 是一個企業多語言單點登錄解決方案,支持大量附加身份驗證協議和功能,滿足身份驗證和授權需求的綜合平臺。
2.環境
- Windows 10
- JDK 1.8
- git version 2.41.0.windows.3
- Tomcat 9.0.78
- Maven 3.5.3
- cas-overlay-template-5.3
CAS Home:https://apereo.github.io/cas
cas-overlay-template - GitHub:https://github.com/apereo/cas-overlay-template/tree/5.3
REST-Protocol:https://apereo.github.io/cas/development/protocol/REST-Protocol.html
Tomcat 9:https://tomcat.apache.org/download-90.cgi
Anumbrella - CAS 專欄:https://blog.csdn.net/anumbrella/category_7765386.html
Shuyun123 - GitHub:https://github.com/Shuyun123/CAS
二、使用實踐
1.編譯項目
- 下載項目:https://github.com/apereo/cas-overlay-template/tree/5.3
- 解壓 cas-overlay-template-5.3.zip
- 進入文件夾 cas-overlay-template-5.3
第一種編譯:
-
使用 Git 命令窗口
-
右擊 - Open Git Bash here
./build.sh package
第二種編譯:
- CMD 窗口
build.cmd package
- CAS 編譯后的目錄:cas-overlay-template-5.3\target\cas
2.部署項目
-
下載 Tomcat 9:https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.78/bin/apache-tomcat-9.0.78.zip
-
解壓 Tomcat
-
將 target 文件夾下的 cas 文件夾拷貝到 Tomcat 中:apache-tomcat-9.0.78\webapps
-
注意:JDK 版本是1.8
-
啟動 Tomcat:雙擊
apache-tomcat-9.0.78\bin\startup.bat
-
瀏覽器訪問:http://127.0.0.1:8080/cas
-
默認賬號密碼:casuser::Mellon
-
默認賬號密碼配置文件:
cas-overlay-template-5.3\target\cas\WEB-INF\classes\application.properties
3.配置HTTPS
- 登錄頁面的黃色背景提示內容:
非安全連接
您當前正在通過非安全連接訪問 CAS。單點登錄不起作用。為了進行單點登錄,您必須通過 HTTPS 登錄。
1)生成密鑰
-
JDK 的 bin 目錄下執行
-
記住密碼,導出證書需要使用
-
您的名字與姓氏是什么,填寫域名,例如:test.org
keytool -genkey -alias mycacerts -keyalg RSA -keystore D:/ssh-key/keycard
2)導出證書
- JDK 的 bin 文件夾下執行
keytool -export -file D://ssh-key/keycard.crt -alias mycacerts -keystore D:/ssh-key/keycard
3)Tomcat配置HTTPS
-
編輯 apache-tomcat-9.0.78\conf\server.xml
-
新增 8443 端口的 HTTPS 配置
-
修改具體的密鑰路徑和密鑰庫口令(與生成密鑰時相同)
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"maxThreads="150" SSLEnabled="true"maxParameterCount="1000"scheme="https" secure="true" clientAuth="false" sslProtocol="TLS"keystoreFile="D:/ssh-key/keycard" keystorePass="123456">
</Connector>
4)配置 hosts 文件
- 編輯 C:\Windows\System32\drivers\etc\hosts
- 與生成密鑰時相同
127.0.0.1 test.org
5)測試
-
關閉科學上網軟件(無則忽略)
-
瀏覽器訪問:https://test.org:8443/cas
4.未認證授權的服務
- 客戶端跳轉提示:
未認證授權的服務
CAS的服務記錄是空的,沒有定義服務。 希望通過CAS進行認證的應用程序必須在服務記錄中明確定義。
(1)編輯 cas\WEB-INF\classes\services\HTTPSandIMAPS-10000001.json
- 加入 http 的支持
{"@class" : "org.apereo.cas.services.RegexRegisteredService","serviceId" : "^(https|imaps|http)://.*","name" : "HTTPS and IMAPS","id" : 10000001,"description" : "This service definition authorizes all application urls that support HTTPS and IMAPS protocols.","evaluationOrder" : 10000
}
(2)編輯 cas\WEB-INF\classes\application.properties
#是否開啟json識別功能,默認為false
cas.serviceRegistry.initFromJson=true
#忽略https安全協議,使用 HTTP 協議
cas.tgc.secure=false
5.二次開發
1)登錄認證方式
認證方式 | 依賴包 |
---|---|
白名單 | cas-server-support-generic |
黑名單 | |
JDBC 認證 | |
Shiro 認證 | cas-server-support-shiro-authentication |
Rest 認證 | cas-server-support-rest-authentication |
自定義登錄認證 | cas-server-core-authentication-api cas-server-core-configuration-api |
2)修改CAS服務端登錄界面
(1)隱藏頭部和底部
- 編輯:cas\WEB-INF\classes\templates\layout.html
<body>
<!-- <div th:replace="fragments/header :: header"><a href="fragments/header.html">Header</a> fragment will go here
</div> --><main role="main" class="container mt-3 mb-3"><div layout:fragment="content" id="content">CAS content will go here</div>
</main><!-- <div th:replace="fragments/footer :: footer"><a href="fragments/footer.html">Footer</a> fragment will go here
</div> --><script th:replace="fragments/scripts"/>
</body>
(2)隱藏右側 Links to CAS Resources
- 編輯:cas\WEB-INF\classes\templates\casLoginView.html
<body class="login">
<main role="main" class="container mt-3 mb-3"><div layout:fragment="content" class="row"><div class="col-md"><div th:replace="fragments/loginform :: loginform"><a href="fragments/loginform.html">Login Form goeshere</a></div></div><div id="notices" class="col-md mt-3 mt-md-0"><!-- <div th:replace="fragments/insecure :: insecure"><a href="fragments/insecure.html">insecure alert goeshere</a></div><div th:replace="fragments/defaultauthn :: staticAuthentication"><a href="fragments/defaultauthn.html">defaultAuthn</a>fragment</div><div th:replace="fragments/cookies :: cookiesDisabled"><a href="fragments/cookies.html">cookies</a> fragment</div><div th:replace="fragments/serviceui :: serviceUI"><a href="fragments/serviceui.html">service ui</a> fragment</div><div th:replace="fragments/loginProviders :: loginProviders"><a href="fragments/loginProviders.html">loginProviders</a>fragment</div><div th:replace="fragments/cas-resources-list :: cas-resource-list"><a href="fragments/cas-resources-list.html">cas-resource</a> list fragment</div> --></div></div>
</main>
</body>
(3)隱藏登錄按鈕下的提示
- 編輯:cas\WEB-INF\classes\templates\fragments\loginform.html
<!-- <div th:replace="fragments/loginsidebar :: loginsidebar" /> -->
(4)登錄界面左側顯示圖片
-
拷貝圖片到文件夾:cas\WEB-INF\classes\static\images
-
編輯:cas\WEB-INF\classes\static\css\cas.css
#notices {border-color: #008;color: #008;background-image: url(../images/login_img.png);
}
(5)更換瀏覽器標簽頁圖標
- 替換圖片文件:cas\WEB-INF\classes\static\favicon.ico