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