您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页单点登录示例

单点登录示例

来源:化拓教育网
单点登录简单实现

默认时,为了启用Web SSO,开发者必须开启HTTPS传输通道。由于传回CASTGC Cookie到CAS服务器需要走HTTPS通道,因此开发者必须准备好X.509 CA证书。当然,您也可以选择修改这一默认行为,但从安全性的角度考虑,不推荐这样做。

1.使用keytool生成根证书 1.1.查看jre信任的证书

(1)查看jre中所有信任的证书信息

keytool -list -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit

(2)查看别名为root的证书信息 keytool -v -list -alias root

-keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit

1.2.删除jre中别名为root的证书 keytool -delete -alias root

-keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit

1.3.开始生成根证书

确认jre中不存在别名为root的证书之后,我们开始生成根证书。 (1)生成密钥库文件root.keystore

keytool -genkey -keyalg RSA -alias root -dname \" CN=localhost, OU=javaeeOU, O=javaee, L=GuangZhou, ST=GuangDong, C=CN\" -storepass changeit -keystore root.keystore 使用默认密码,直接回车。

(2)导出别名为root的证书,证书名root.crt

keytool -export -alias root -file root.crt -storepass changeit -keystore root.keystore

(3)将证书导入到jre信任证书库中

keytool -import -alias root -file root.crt

-keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit

(4)查看别名为root的证书信息,确认成功导入到jre信任证书库中 keytool -v -list -alias root

-keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit

2.启用HTTPS

2.1.在Tomcat中启用HTTPS配置

打开Tomcat目录下的conf/server.xml文件,添加Connector代码如下: maxThreads=\"150\" minSpareThreads=\"2\" maxSpareThreads=\"10\"

scheme=\"https\" secure=\"true\"

clientAuth=\"false\" sslProtocol=\"TLS\"

keystoreFile=\"conf/root.keystore\"

keystorePass=\"changeit\"

truststoreFile=\"E:/DevelopTools/JDK/jdk1.5.0_10/jre/lib/security/cacerts\" /> 其中:

keystoreFile指向密钥库文件root.keystore keystorePass默认为changeit

truststoreFile指向jre信任的证书库文件

2.2.安装证书

启动Tomcat,访问地址:https://localhost:8443/cas3,浏览器将会返回证书错误界面:

单击“继续浏览此网站(不推荐)”链接,查看并将证书导入到浏览器中:

单击“查看证书”,弹出证书安装界面:

单击“安装证书”,进入证书导入向导界面:

选择“受信任的根证书颁发机构”,接下来只需要一路选择“下一步”或者“是”直至导入成功。

证书导入成功后,重新浏览器并访问地址:https://localhost:8443/cas3,将会看到类似于下图的锁图标,并可单击该图标查询证书信息,这表示证书已安装

成功,正确启用了HTTPS。

3.对Web应用实施SSO

Web应用采用Tomcat自带的servlet例子Hello World,默认访问路径为http://localhost:8080/examples/servlets/servlet/HelloWorldExample。在没有对该servlet实施SSO之前,启动Tomcat后访问结果如下图所示:

接下来,我们将对该servlet实施SSO,配置步骤如下: 3.1.添加Cas Client相应Jar包

只需要添加两个Jar包:cas-client-core-3.1.10.jar、commons-logging-1.0.4.jar,将其拷贝到Tomcat安装目录下的webapps\\examples\\WEB-INF\\lib目录下。

3.2.配置web.xml文件

对于Cas Client在web.xml文件中的配置,主要包括两个方面,一个是过滤器的配置,另一个是的配置。

3.2.1.过滤器配置 主要有以下5个过滤器: 1.SingleSignOutFilter 2.AuthenticationFilter

3.TicketValidationFilter (whichever one is chosen) 4.HttpServletRequestWrapperFilter 5.AssertionThreadLocalFilter

对于这5个过滤器,在web.xml中的配置必须严格按照以上顺序进行声明。 其中,AuthenticationFilter、TicketValidationFilter是必须配置的,其他3个过滤器是可选的。特别的,如果配置了SingleSignOutFilter,必须配合SingleSignOutHttpSessionListener这一进行使用。

3.2.1.1.SingleSignOutFilter

该过滤器用于实现单点登出功能,可选配置。配置如下:

CAS Single Sign Out Filter

org.jasig.cas.client.session.SingleSignOutFilter

CAS Single Sign Out Filter

/servlets/servlet/HelloWorldExample

3.2.1.2.AuthenticationFilter

该过滤器负责用户的认证工作,必须启用它。配置如下:

CAS Authentication Filter

org.jasig.cas.client.authentication.AuthenticationFilter

casServerLoginUrl

https://localhost:8443/cas3/login

serverName localhost:8080

CAS Authentication Filter

/servlets/servlet/HelloWorldExample

3.2.1.3.TicketValidationFilter

该过滤器负责对Ticket的校验工作,必须启用它。配置如下:

CAS Validation Filter

org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter

casServerUrlPrefix

https://localhost:8443/cas3

serverName localhost:8080

CAS Validation Filter

/servlets/servlet/HelloWorldExample

3.2.1.4.HttpServletRequestWrapperFilter

该过滤器负责实现HttpServletRequest请求的包裹,比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。配置如下:

CAS HttpServletRequest Wrapper Filter

org.jasig.cas.client.util.HttpServletRequestWrapperFilter

CAS HttpServletRequest Wrapper Filter /servlets/servlet/HelloWorldExample

3.2.1.5.AssertionThreadLocalFilter 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。比如AssertionHolder.getAssertion().getPrincipal().getName()。配置如下:

CAS Assertion Thread Local Filter

org.jasig.cas.client.util.AssertionThreadLocalFilter

CAS Assertion Thread Local Filter /servlets/servlet/HelloWorldExample

3.2.2.配置

当配置了SingleSignOutFilter过滤器,即对Web应用实施单点登出功能时,需要在web.xml中添加以下:

org.jasig.cas.client.session.SingleSignOutHttpSessionListener 3.2.3.启动应用

配置完成后,重新启动Tomcat,并访问地址

http://localhost:8080/examples/servlets/servlet/HelloWorldExample,由于该servlet已受到Cas的保护,所以我们会被引导到Cas登录页面。 只有通过Cas认证,才能真正的访问到

http://localhost:8080/examples/servlets/servlet/HelloWorldExample这个servlet

在实际应用中,用户认证信息一般会存放在RDBMS或LDAP中,这样能够更好的保证系统的安全性。本节将采用RDBMS的存储方式,通过一个简单的实例展示其使用方法。

1.准备环境

操作系统:32位Window XP CAS服务器:Cas Server 3.3.3 CAS客户端:Cas Client 3.1.10 Web服务器:Tomcat 6.0.18 数据库:MySQL 5.0

2.准备数据库 2.1.创建数据库

create database cas CHARSET=utf8;

2.2.创建用户表 CREATE TABLE `users` (

`id` int(11) NOT NULL auto_increment, `username` varchar(50) NOT NULL, `password` varchar(50) NOT NULL, `sex` varchar(2) NOT NULL, `age` int(4) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.3.准备数据

INSERT INTO `users` VALUES ('1', 'admin', '21232f297a57a5a7434a0e4a801fc3', '男', '26'); INSERT INTO `users` VALUES ('2', 'javaee', '21232f297a57a5a7434a0e4a801fc3', '男', '26');

密码均为admin (显然为由MD5在32操作系统下加密“admin”后所得)。

3.添加数据库信息

打开cas3的WEB-INF/cas.properties文件,添加数据库相关信息: jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/cas?useUnicode=true&characterEncoding=utf-8&autoReconnect=true jdbc.username=root jdbc.password=root

cas.auth.sql=select u.password from users u where lower(u.username) = lower(?)

其中,url、username、password根据实际情况进行修改。

4.添加Jar包

MySQL数据库JDBC支持包:mysql-connector-java-5.1.9.jar

DBCP连接池支持包:commons-pool-1.2.jar、commons-dbcp- 1.2.1.jar QueryDatabaseAuthenticationHandler使用Spring JDBC支持包:spring-jdbc-2.5.6.jar

JDBC认证处理器实现支持:cas-server-support-jdbc-3.3.3.jar

5.配置数据库认证 5.1.认证管理器

在讲解如何使用数据库认证之前,让我们先来了解一下AuthenticationManagerImpl对象authenticationManager。

authenticationManager对象用于认证用户信息,在用户登录CAS时,将会使用该认证管理器进行认证。

AuthenticationManagerImpl实现了AuthenticationManager接口,接口定义如下:

public interface AuthenticationManager {

String AUTHENTICATION_METHOD_ATTRIBUTE = \"authenticationMethod\";

Authentication authenticate(final Credentials credentials) throws AuthenticationException; }

AuthenticationManagerImpl借助于AuthenticationHandler集合List和CredentialsToPrincipalResolver集合List完成对用户的认证工作。AuthenticationHandler负责完成用户的认证工作,而CredentialsToPrincipalResolver负责构建认证结果。

对于配置了多个AuthenticationHandler的实现,一旦其中一个认证处理器认证通过,其他认证处理器将不再执行。配置了多个

CredentialsToPrincipalResolver的处理方式与AuthenticationHandler一致。

至此,我们认识到如果要实现RDBMS认证,必须提供相应的

AuthenticationHandler实现方式。那么具体需要如何来实现,CAS为我们提供了基本的JDBC支持包cas-server-support-jdbc-3.3.3.jar。在CAS中引入该

包后,使用其实现类

org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler将满足我们的需要。接下来,我们开始进行配置:

5.2.修改配置文件deployerConfigContext.xml 打开cas3的WEB-INF/deployerConfigContext.xml文件

5.2.1.添加dbcp数据源配置

5.2.2.添加MD5加密编码器

class=\"org.jasig.cas.authentication.handler.DefaultPasswordEncoder\">

5.2.3.添加RDBMS认证处理器

class=\"org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler\">

5.2.4.验证配置

经过以上几个步骤,对于数据库认证的配置已经完成。接下来,我们启动Tomcat进行测试。启动完毕后,使用admin或javaee用户登录CAS认证服务器,如果登录成功,我们将会在Tomcat日志中看到类似信息:

从日志信息中可以看到,我们的确成功的借助于QueryDatabaseAuthenticationHandler对用户进行了认证。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务