提醒:文档只是作为一个基础的参考,愿意了解的朋友可以随时咨询。
第一节:单点登录简介
第一步:了解单点登录
SSO 主要特点是: SSO 应用之间使用 Web 协议 (如 HTTPS),并且只有一个登录入口.
SSO 的体系中有下面三种角色:
1)User( 多个)
2)Web 应用 ( 多个)
3)SSO 认证中心 ( 一个)
SSO 实现包含以下三个原则:
1) 所有的登录都在 SSO 认证中心进行。
2) SSO 认证中心通过一些方法来告诉 Web 应用当前访问用户究竟是不是通过认证的用户.
3) SSO 认证中心和所有的 Web 应用建立一种信任关系.
CAS 的基本原理 CAS(Central Authentication Service) 是 Yale 耶鲁大学发起的构建 Web SSO 的 Java 开源项目。
1.CAS 术语解释:
SSO-Single Sign On 单点登录
TGT-Ticket Granting Ticket 用户身份认证凭证票据
ST-Service Ticket 服务许可凭证票据
TGC-Ticket Granting Cookie 存放用户身份认证凭证票据的 cookie.
第二步:了解单点登录体系结构
1)CAS Server 负责完成对用户信息的认证,需要单独部署,CAS Server 会处理用户名 / 密码等凭证 (Credentials).
2)CAS Client 部署在客户端,当有对本地 Web 应用受保护资源的访问请求,并且需要对请求方进行身份认证,重定向到 CAS Server 进行认证.
第三步:单点登录环境准备工作
1)cas-server-3.5.0-release.zip(CAS 服务端)
2)cas-client-3.3.3-release.zip(CAS 客户端)
3)apache-tomcat-7.0.40
4)cas-client-core-3.2.1.jar
5)cas-server-core-3.5.0.jar
6)cas-server-support-jdbc-3.5.0.jar
第二节:单点登录环境搭建与部署
第一步:环境部署
1. 通过 Java JDK 生成证书三部曲
证书对于实现此单点登录非常之重要,证书是服务器端和客户端安全通信的凭证,本教程只是演示,所有用了 JDK 自带的证书生成工具 keytool。
当然在实际项目中你可以到专门的证书认证中心购买证书。
使用 JDK 自带的 keytool 生成证书
第一步生成证书:
keytool -genkey -alias mycacerts -keyalg RSA -keystore C:/common/keys/keycard
注意:输入相关信息用于生成证书. 其中名字与姓氏这一最好写你的域名,如果在单击测试你可以在 C:\Windows\System32\drivers\etc\hosts 文件中映射一个虚拟域名,
注意不要写 IP。
第二步导出证书:
keytool -export -file C:/common/keys/keycard.crt -alias mycacerts -keystoreC:/common/keys/keycard
第三步导入到 JDK 安装目录证书:
keytool -import -keystore C:/"ProgramFiles"/Java/jdk1.6.0_32/jre/lib/security/cacerts -fileC:/common/keys/keycard.crt -alias mycacerts
2. 解压 cas-server-3.5.0-release.zip 文件,
在 cas-server-3.5.0-release\cas-server-3.5.0\modules 目录下找到 cas-server-webapp-3.5.0.war 文件并命名为 cas.war,并复制到在 Tomcat 根目录的 webapps 目录下,
如下图:
3. 修改 host 文件(C:\Windows\System32\drivers\etc)hosts 文件中添加添加以下配置
127.0.0.1 jeesz.cn (配置自己的域名.)
注意:如果想在一台 PC 机上模拟这个单点登录,就必须域名重定向,如果是多台PC机,可以不配置此项,下文有用到fast-web.cn,可以用相应PC机的IP代替
4. 修改 Tomcat 文件下的 server.xml(apache-tomcat-7.0.40\conf\server.xml) 添加以下内容:
在 server.xml 文件中把
maxThreads="150" scheme="https"secure="true"
clientAuth="false" sslProtocol="TLS" />
修改成如下:
port="8443"
protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150"
SSLEnabled="true"
scheme="https"
secure="true"
clientAuth="false"
sslProtocol="TLS"
keystoreFile="C:/common/keys/keycard"
keystorePass="xxxxxx"
ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA"
/>
5. 启动 Tomcat 服务,查看信息,(如果有报错,可以根据信息查找错误),打开浏览器,输入http://jeesz.cn:8080/cas如果出现以下界面,则代表 CAS 服务端配置成功。
注:这个是最简单的 CAS 服务,只要输入的用户名跟密码一样,就可以正常登陆,在我们实际开发中,这个验证因为跟数据库作比较,接下来,我们就配置数据库校验。
第二步:配置数据库验证
1. 在 apache-tomcat-7.0.2\webapps\cas\WEB-INF 目录下找到 deployerConfigContext.xml 文件,找到如下代码:
添加下面代码:
这里 sql 属性是从 user 表中根据 cas 登陆名查找密码 -->
2. 增加数据源 dataSource,
在 deployerConfigContext.xml,(跟上面同一个文件)找到
,在下面添加如下代码:
com.mysql.jdbc.Driver
jdbc:mysql://127.0.0.1:3306/sso 根据自己的数据库 URL 地址 -->
root 根据自己的数据库用户名 -->
根据自己的数据库密码 -->
3. 数据库添加用户表及数据(这里用的 mysql),比如在 mysql 数据库中有 t_user 表
4. 增加 jar 包,cas-client-core-3.2.1.jar、cas-server-core-3.5.0.jar、cas-server-support-jdbc-3.5.0.jar 包拷贝到 apache-tomcat-7.0.2\webapps\cas\WEB-INF\lib 目录下。
5. 重启 Tomcat,打开浏览器,输入http://jeesz.cn:8080/,输入数据库里的用户名和密码,如果出现如下界面,则配置成功。
现在我们的 CAS 服务端已经配置好了,接下来,我们配置客户端
第二节:配置自己的 Web 工程(客户端)
1. 在 host 文件下,添加如下代码:
127.0.0.1 www.sso1.com
127.0.0.1www.sso2.com
注意:这个网址最好不要用互联网已经存在的域名,否则你将无法访问该地址。
如果想在一台 PC 机上模拟这个单点登录,就必须域名重定向,如果是多台PC机,可以不配置此项,下文有用到 www.sso1.com,www.sso2.com,可以用相应PC机的IP代替
1. 在 Tomcat 根目录下创建一个 sso1,sso2 目录。如下如:
2 在 eclipse 新建两个 web 工程,分别为 sso1,sso2。
3 在自己的 Web 工程里加入 cas-client-core.jar,commons-logging-1.1.jar,(解压 cas-client-3.2.0-release.zip,在 cas-client-3.2.0-release.zip\cas-client-3.2.0\modules,找到该 JAR 包)
分别加入到 sso1,sso2 工程的 lib 里。
--------------------------------------------------------------------
完整的项目源码来源欢迎大家一起学习研究相关技术,源码获取请加求求:2670716182
SSO JEESZ Java
|
|