史上最强,Cas单点登录之服务端搭建

Cas-Server搭建

大浪淘沙,沉者为金

Cas-Server官网:

https://github.com/apereo/cas

进入官网,可以看到版本有很多,主要区别为:

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官网:

https://tomcat.apache.org/
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

服务端配置介绍

在这里插入图片描述

最常用的三个配置文件

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://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

在这里插入图片描述

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、你的安全证书除了用于导入,还可以直接双击安装。

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值