史上最强,Cas单点登录之服务端搭建
Cas-Server搭建:配置文件介绍,自定义数据源,关闭HTTPS协议,开启restful接口,使用HTTPS协议。
目录
Cas-Server搭建
大浪淘沙,沉者为金
Cas-Server官网:
进入官网,可以看到版本有很多,主要区别为:
3.x:web版本
4.x:maven版本
5.x:gradle版本
一般4.x用的比较多。
高版本:
自己打包的话,命令为:
build.cmd run
mvn clean package
build package
弱水三千,只取一瓢
下载好后,打开发现文件非常多。
都不要去看,直接找到module目录下的cas-server-webapp-4.0.0.war。
将war包放到一个干净的Tomcat中(以后出错,可以排除tomcat本身问题报错)。
Tomcat官网:
服务端配置介绍
最常用的三个配置文件
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包。
关闭HTTPS协议
看下边四个链接,都是https开头的。
厉害一点的网站都是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
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错误。
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
1、获取TGT。
http://localhost:8080/cas/v1/tickets POST
username=admin&password=1
响应码 201
返回值 TGT
2、获取ST。
http://localhost:8080/cas/v1/tickets/{上一步骤的TGTID} POST
service=localhost:8020 目标客户端地址
响应码 200
返回值 ST
3、验证ST。
http://localhost:8080/cas/serviceValidate POST
service=localhost:8020 ticket=ST-1-5CAuRHk7XLiPwKRAeZAx-xiaolaoben
响应码 200
返回值 username
使用HTTPS协议
当我们正常访问cas-server时,经常看到一个警告。
翻译一下就是:让你使用HTTPS协议进行单点登录。
治标
对于某些强迫症患者来说,不喜欢warning,可以用一个非常简单的方法。
进入casLoginView.jsp页面,将这段话删掉就好了,不用管什么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依次执行命令。
最终会生成三个文件,如图:
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
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
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,不会再说不安全了。
Tips:
有时候,你会碰到这样的情况,总是报不安全之类的,点击高级然后点进去就行了。
取消方法为:
1、将你上边生成的安全证书导入你使用的谷歌浏览器或者EDGE浏览器就可以了。
2、你的安全证书除了用于导入,还可以直接双击安装。
更多推荐
所有评论(0)