首页 » 网站建设 » casphp客户端技巧_单点上岸CAS的进修

casphp客户端技巧_单点上岸CAS的进修

访客 2024-11-06 0

扫一扫用手机浏览

文章目录 [+]

CAS

CAS是Central Authentication Service的缩写,中心认证做事,一种独立开放指令协议。
CAS 是 耶鲁大学(Yale University)发起的一个开源项目,旨在为 Web 运用系统供应一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。

特点

casphp客户端技巧_单点上岸CAS的进修

1、开源的企业级单点登录办理方案。

casphp客户端技巧_单点上岸CAS的进修
(图片来自网络侵删)

2、CAS Server 为须要独立支配的 Web 运用。

3、CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 运用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。

4、CAS属于Apache 2.0容许证,许可代码修正,再发布(作为开源或商业软件)。

事理步骤

从构造上看,CAS 包含两个部分: CAS Server 和 CAS Client。
CAS Server 须要独立支配,紧张卖力对用户的认证事情;CAS Client 卖力处理对客户端受保护资源的访问要求,须要登录时,重定向到 CAS Server。
下图是 CAS 最基本的协议过程:

SSO单点登录访问流程紧张有以下步骤:

1. 访问做事:SSO客户端发送要求访问运用系统供应的做事资源。

2. 定向认证:SSO客户端会重定向用户要求到SSO做事器。

3. 用户认证:用户身份认证。

4. 发放票据:SSO做事器会产生一个随机的Service Ticket。

5. 验证票据:SSO做事器验证票据Service Ticket的合法性,验证通过后,许可客户端访问做事。

6. 传输用户信息:SSO做事器验证票据通过后,传输用户认证结果信息给客户端。

CAS的做事端搭建

做事端搭建

下载cas的做事真个war包。
该文版本:cas-server-4.0.0-release。

链接:https://pan.baidu.com/s/1Ldzu4xvbWlwZV3hcL0p6xA 提取码:vwwm

将cas-server-4.0.0\modules下的cas-server-webapp-4.0.0.war放入tomcat的wepapps目录下。

已修正名字

启动tomcat。
浏览器输入localhost:8080/cas/login

默认账号密码:casuser,Mellon。

上岸为:localhost:8080/cas/logout

做事器其他配置

1.这里默认利用8080端口,可以修正端口。

1)打开tomcat 目录 conf\server.xml 找到下面的配置

将8080端口修正为你配置的端口,这里设置为9000。

2)修正CAS配置文件

修正cas的WEB-INF/cas.properties

3)重启tomcat

2.去除https认证

CAS默认利用的是HTTPS协议,如果利用HTTPS协议须要SSL安全证书(需向特定的机构申请和购买) 。
如果对安全哀求不高或是在开拓测试阶段,可利用HTTP协议。
我们这里讲解通过修正配置,让CAS利用HTTP协议。

1)修正cas的WEB-INF/deployerConfigContext.xml找到下面的配置:

增加参数p:requireSecure="false",requireSecure:是否须要安全验证,即HTTPS,false为不采取。

2)修正cas的/WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml

将参数p:cookieSecure="true",改为p:cookieSecure="false"。
true为采取HTTPS验证,false为不验证。

将 p:cookieMaxAge="-1"改成p:cookieMaxAge="3600"。

参数p:cookieMaxAge="-1",是COOKIE的最大生命周期,-1为无生命周期,即只在当前打开的窗口有效,关闭或重新打开其它窗口,仍会哀求验证。
可以根据须要修正为大于0的数字,比如3600等,意思是在3600秒内,打开任意窗口,都不须要验证。

3)修正cas的WEB-INF/spring-configuration/warnCookieGenerator.xml

将参数p:cookieSecure="true",改为p:cookieSecure="false",将 p:cookieMaxAge="-1"改成p:cookieMaxAge="3600"。

3.添加其他账号

1)修正cas的WEB-INF/deployerConfigContext.xml找到下面的配置:

2)添加一个用户,账号admin,密码admin。

3)重启tomcat

输入admin,admin上岸成功。

CAS的客户端搭建

创建了两个客户端。
新建两个个maven项目,cas_demo1和cas_demo2。

pom.xml添加如下依赖:

<groupId>com.cas.test</groupId> <artifactId>cas_demo1</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <!-- cas --> <dependency> <groupId>org.jasig.cas.client</groupId> <artifactId>cas-client-core</artifactId> <version>3.3.3</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <configuration> <!-- 指定端口 --> <port>9001</port> <!-- 要求路径 --> <path>/</path> </configuration> </plugin> </plugins> </build>

修正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>CASFilter</filter-name> <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class> <init-param> <param-name>casServerLoginUrl</param-name> <param-value>http://localhost:9000/cas/login</param-value> <!--这里的server是做事真个IP --> </init-param> <init-param> <param-name>serverName</param-name> <!--这里的本机的IP地址,用于认证成功的重定向 --> <param-value>http://localhost:9001</param-value> </init-param> </filter> <filter-mapping> <filter-name>CASFilter</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>http://localhost:9000/cas</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://localhost:9001</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> <welcome-file-list> <welcome-file>/WEB-INF/index.jsp</welcome-file> </welcome-file-list>

index.jsp只是大略的显示上岸的账号和成功信息。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>cas-client-demo1</title></head><body>上岸成功,用户名: <%=request.getRemoteUser() %><a href="http://localhost:9000/cas/logout?service=http://localhost:9000/cas/login">退出登录</a></body></html>

cas_demo2客户真个代码类似,只是pom.xml,web.xml的中的端口配置为9002。

启动cas_demo1和cas_demo2。

地址栏输入http://localhost:9001/和http://localhost:9002/ ,地址均会跳转到CAS登录页。

输入用户名和密码后,页面跳转回9001的主页面 ,再次访问9002也可以打开主页面。

点击退出上岸并不能跳转,这时须要添加其他的配置。

修正cas系统的配置文件cas-servlet.xml。

将cas.logout.followServiceRedirects:false改为true。
重启后,点击退出上岸,跳转成功。

CAS做事端数据源设置

一样平常用户的账号名密码存在数据库中,这里从数据库中获取账号密码验证上岸。

修正cas做事端中web-inf下deployerConfigContext.xml ,添加如下配置

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" p:driverClass="com.mysql.jdbc.Driver" p:jdbcUrl="jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8" p:user="root" p:password="" /> <bean id="passwordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" c:encodingAlgorithm="MD5" p:characterEncoding="UTF-8" /> <bean id="dbAuthHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler" p:dataSource-ref="dataSource" p:sql="select password from sys_user where username = ?" p:passwordEncoder-ref="passwordEncoder"/>

然后在配置文件开始部分找到如下配置。

<bean id="authenticationManager" class="org.jasig.cas.authentication.PolicyBasedAuthenticationManager"> <constructor-arg> <map> <entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" /> <entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" /> </map> </constructor-arg> <property name="authenticationPolicy"> <bean class="org.jasig.cas.authentication.AnyAuthenticationPolicy" /> </property></bean>

个中

<entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />

一句是利用固定的用户名和密码,我们不才面可以看到这两个bean ,如果我们利用数据库认证用户名和密码,须要将这句注释掉。

添加下面这一句配置

<entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver"/>

将以下三个jar包放入webapps\cas\WEB-INF\lib下 。
重启做事。

test数据库中有个sys_user表,个顶用户为test,密码为test,已加密。

输入地址,用数据库中用户测试上岸,测试成功。

标签:

相关文章

今日头条算法如何打造个化推荐系统

信息爆炸的时代已经到来。人们每天都要面对海量的信息,如何在海量信息中找到自己感兴趣的内容,成为了许多人关注的焦点。今日头条作为一款...

网站建设 2025-01-31 阅读1 评论0