小蚂蚁-CAS单点登录系列


小蚂蚁-CAS单点登录系列 作者: zhanjia http://zhanjia.iteye.com CAS单点登录入门教程系列 http://www.iteye.com - 做最棒的软件开发交流社区 第 1 / 41 页 本书由ITeye提供的电子书DIY功能自动生成于 2012-05-18 目 录 1. 单点登录(SSO) 1.1 小蚂蚁-CAS单点登录系列(1)-基础知识 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 小蚂蚁-CAS单点登录系列(2)-初步认识CAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12 1.3 小蚂蚁-CAS单点登录系列(3)-简单实施SSO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16 1.4 小蚂蚁-CAS单点登录系列(4)-使用RDBMS认证 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25 1.5 小蚂蚁-CAS单点登录系列(5)-简单实施SSO之二 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29 http://zhanjia.iteye.com 第 2 / 41 页 1.1 小蚂蚁-CAS单点登录系列(1)-基础知识 发表时间: 2010-08-10 关键字: 算法, 应用服务器, 网络协议, 网络应用, SSO 1.单点登录 1.1.概述   单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应 用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 1.2.技术实现机制   当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中进行登录;根据用户提供的登录信息,认 证系统进行身份效验,如果通过效验,应该返回给用户一个认证的凭据--ticket;用户再访问别的应用的时候,就会将这个 ticket带上,作为自己认证的凭据,应用系统接受到请求之后会把ticket送到认证系统进行效验,检查ticket的合法性。如果通 过效验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。 1.3.要实现SSO需要以下主要的功能   所有应用系统共享一个身份认证系统;   所有应用系统能够识别和提取ticket信息;   应用系统能够识别已经登录过的用户,能自动判断当前用户是否登录过,从而完成单点登录的功能。 其中,统一的身份认证系统最重要,认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认 证成功后,认证系统应该生成统一的认证标志(ticket),返还给用户。另外,认证系统还应该对ticket进行效验,判断其有 效性。整个系统可以存在两个以上的认证服务器,这些服务器甚至可以是不同的产品。认证服务器之间要通过标准的通讯协 议,互相交换认证信息,就能完成更高级别的单点登录。 2.数字签名 2.1.概念   数字签名(又称公钥数字签名、电子签章)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实 现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。 2.2.主要功能   保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生。   数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送的公钥才能解密被加密的 摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整 的,在传输过程 中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。    数字签名是个加密的过程,数字签名验证是个解密的过程。 2.3.数字签名的流程 http://zhanjia.iteye.com 1.1 小蚂蚁-CAS单点登录系列(1)-基础知识 第 3 / 41 页 3.数字证书 3.1.概念    数字证书就是互联网通讯中标志通讯各方身份信息的一系列数据,提供了一种在Internet上验证您身份的方式,其作用 类似于司机的驾驶执照或日常生活中的身份证。它是由一个由权威机构---CA机构,又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。数字证书是一个经证书授权中心数字签名的包含公开密钥 拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。 3.2.颁发过程    数字证书颁发过程一般为:用户首先产生自己的密钥对,并将公共密钥及部分个人身份信息传送给认证中心。 认证中心 在核实身份后,将执行一些必要的步骤,以确信请求确实由用户发送而来,然后,认证中心将发给用户一个数字证书,该证书 内包含用户的个人信息和他的公钥信息,同时还附有认证中心的签名信息。用户就可以使用自己的数字证书进行相关的各种活 动。数字证书由独立的证书发行机构发布。数字证书各不相同,每种证书可提供不同级别的可信度。可以从证书发行机构获得 您自己的数字证书。 3.3.证书格式    目前数字证书的格式普遍采用的是X.509 V3国际标准,内容包括证书序列号、证书持有者名称、证书颁发者名称、证书 有效期、公钥、证书颁发者的数字签名等。    数字证书主要由以下两部分组成 :    1、证书数据,包括以下内容 :    * 版本信息,用来与X.509的将来版本兼容;    * 证书序列号,每一个由CA发行的证书必须有一个惟一的序列号;    * CA所使用的签名算法; http://zhanjia.iteye.com 1.1 小蚂蚁-CAS单点登录系列(1)-基础知识 第 4 / 41 页    * 发行证书CA的名称;    * 证书的有效期限;    * 证书主题名称;    * 被证明的公钥信息,包括公钥算法、公钥的位字符串表示;    * 包含额外信息的特别扩展。    2、发行证书的CA的数字签名 4.CA认证中心 4.1.概念   CA中心又称CA机构,即证书授权中心(Certificate Authority ),或称证书授权机构,作为电子商务交易中受信任的第三 方,承担公钥体系中公钥的合法性检验的责任。CA中心为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证 明证书中列出的用户合法拥有证书中列出的公开密钥。CA机构的数字签名使得攻击者不能伪造和篡改证书。在SET交易中, CA不仅对持卡人、商户发放证书,还要对获款的银行、网关发放证书。它负责产生、分配并管理所有参与网上交易的个体所 需的数字证书,因此是安全电子交易的核心环节。 4.2.根证书   根证书是CA认证中心给自己颁发的证书,是信任链的起始点。安装根证书意味着对这个CA认证中心的信任。   从技术上讲,证书其实包含三部分,用户的信息,用户的公钥,还有CA中心对该证书里面的信息的签名,要验证一份证 书的真伪(即验证CA中心对该证书信息的签名是否有效),需要用CA 中心的公钥验证,而CA中心的公钥存在于对这份证书 进行签名的证书内,故需要下载该证书,但使用该证书验证又需先验证该证书本身的真伪,故又要用签发该证书的证书来验 证,这样一来就构成一条证书链的关系,这条证书链在哪里终结呢?答案就是根证书,根证书是一份特殊的证书,它的签发者 是它本身,下载根证书就表明您对该根证书以下所签发的证书都表示信任,而技术上则是建立起一个验证证书信息的链条,证 书的验证追溯至根证书即为结束。所以说用户在使用自己的数字证书之前必须先下载根证书。 5.HTTPS 5.1.概念    HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是 HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存 在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身 份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。    它的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。 5.2.HTTPS和HTTP的区别 1、https协议需要到ca申请证书,一般免费证书很少,需要交费。 2、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。 3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。 http://zhanjia.iteye.com 1.1 小蚂蚁-CAS单点登录系列(1)-基础知识 第 5 / 41 页 4、http的连接很简单,是无状态的,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http 协议安全。 5.3.HTTPS解决的问题 1、信任主机的问题. 2、通讯过程中的数据的泄密和被窜改 6.SSL 6.1.概念    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提 供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。 为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输 过程中不会被截取及窃 听。   当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。   SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可 分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份 认证、协商加密算法、交换加密密钥等。 6.2.SSL协议提供的服务主要有   1)认证用户和服务器,确保数据发送到正确的客户机和服务器;   2)加密数据以防止数据中途被窃取;   3)维护数据的完整性,确保数据在传输过程中不被改变。 6.3.SSL协议的工作流程   服务器认证阶段:1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;2)服务器根据客户的信 息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;3)客户根 据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;4)服务器恢复该主密钥,并返回给 客户一个用主密钥认证的信息,以此让客户认证服务器。 用户认证阶段:在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客 户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。    从SSL 协议所提供的服务及其工作流程可以看出,SSL协议运行的基础是商家对消费者信息保密的承诺,这就有利于商家 而不利于消费者。 7.PKI 7.1.概念   PKI(Public Key Infrastructure)即“公钥基础设施”,是一种遵循既定标准的密钥管理平台,它能够为所有网络应用 提供加密和数字签名等密码服务及所必需的密钥和证书管理体系,简单来说,PKI就是利用公钥理论和技术建立的提供安全服 http://zhanjia.iteye.com 1.1 小蚂蚁-CAS单点登录系列(1)-基础知识 第 6 / 41 页 务的基础设施。当然,没有好的非对称算法和好的密钥管理就不可能提供完善的安全服务,也就不能叫做PKI。也就是说,该 定义中已经隐含了必须具有的密钥管理功能。PKI技术是信息安全技术的核心,也是电子商务的关键和基础技术。 PKI的基础技术包括加密、数字签名、数据完整性机制、数字信封、双重数字签名等。 它由公开密钥密码技术、数字证书、证书发放机构(CA)和关于公开密钥的安全策略等基本成分共同组成的。PKI 是利用公 钥技术实现电子商务安全的一种体系,是一种基础设施,网络通讯、网上交易是利用它来保证安全的。 8.密码体制   密码体制分为私用密钥加密技术(对称加密)和公开密钥加密技术(非对称加密)。 8.1.对称加密算法(对称密钥)   对称密钥加密又叫专用密钥加密,即发送和接收数据的双方必使用相同的密钥对明文进行加密和解密运算。对称密钥加密 算法主要包括:DES、3DES、IDEA、FEAL、BLOWFISH等。 8.2.非对称加密算法(公开密钥加密、公钥加密)   非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果 用公开密钥对数据进行加密,只有用对应 的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密 钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称 加密算法。 非对称加密算法实现机密信息 交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密 信息进行 加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。 算法:RSA、Elgamal、背包算法、Rabin、HD,ECC(椭圆曲线加密算法)。使用最广泛的是RSA算法,Elgamal是另一种常 用的非对称加密算法。 9.X.509 9.1.简介   数字证书的格式遵循X.509标准。X.509是由国际电信联盟(ITU-T)制定的数字证书标准。   X.509被广泛使用的数字证书标准,是由国际电联电信委员会(ITU-T)为单点登录(SSO-Single Sing-on)和授权管理 基础设施(PMI-Privilege Management Infrastructure)制定的PKI标准。X.509定义了(但不仅限于)公钥证书、证书吊 销清单、属性证书和证书路径验证算法等证书标准。 9.2.证书扩展文件名   .cer, .crt - 通常被用于二进制的DER文件格式 (同于.der), 不过也被用于Base64编码的文件 (例如 .pem).   .P7B - 同于 .p7c   .P7C - PKCS#7证书格式,仅仅包含证书和CRL列表信息,没有私钥。   .PFX - 同于 .p12   .P12 - PKCS#12文件, 包含证书(公钥)和私钥(受密码保护),已经完整的证书链信。   PKCS#7 是一种将数据加密和签名(正式名称是“enveloping”)的技术标准。 它描述数字证书的语法和其他加密消息 ——尤其是,数据加密和数字签名的方法,也包含了算法。但PKCS#7不包含私钥信息。   PKCS#12 定义了一个用于保存私钥和对应公钥证书的文件格式,并由对称密钥加密保护。PKCS#12通常采用PFX,P12作 http://zhanjia.iteye.com 1.1 小蚂蚁-CAS单点登录系列(1)-基础知识 第 7 / 41 页 为文件扩展名。 PKCS#12文件可以存放多个证书,并由密码保护,通常用于WINDOWS IIS,也能够被当作Java Keysotre文 件使用,用于Tomcat,Resign,Weblogic,Jboss等,不能被用于Apache。 10.证书管理工具 10.1.keytool工具    keytool是Java中的密钥和数字证书管理工具。它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签 名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务。它还允许用户储存他们的通信对等者的公钥 (以证书形式)。    keytool将密钥和证书储存在一个所谓的密钥仓库中。缺省的密钥仓库实现将密钥仓库实现为一个文件。它用口令来保护 私钥。   keytool 用于数字证书的申请、导入、导出和撤销等操作。 参考资料 : java keytool 使用总结:http://yushan.iteye.com/blog/434955 // 删除 keytool -delete -alias tomcatsso -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit keytool -delete -alias tomcatsso -storepass changeit // 删除 keytool -delete -alias root -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit // 生成私钥 keytool -genkey -keyalg RSA -alias root -dname "cn=mycas.cn" -storepass changeit -keystore root.keystore // 导出证书 keytool -export -alias root -file root.crt -storepass changeit -keystore root.keystore // 导入证书 keytool -import -alias root -file root.crt -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit // 查看 keytool -list -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit http://zhanjia.iteye.com 1.1 小蚂蚁-CAS单点登录系列(1)-基础知识 第 8 / 41 页 更多参数 ,请在命令行下执行:keytool -help 10.2.openssl工具    OpenSSL(http://www.openssl.org/)是一个开放源代码软件包,由Eric A. Young 和Tim J.Hudson等人编写,实现 了SSL及相关加密技术,是最常用的证书管理工具。OpenSSL功能远胜于KeyTool,可用于根证书、服务器证书和客户证书的 管理。 10.2.1 .openssl 使用说明 (Windows32,笔者下载使用:Win32OpenSSL_Light-1_0_0a.exe) 1. 环境变量 设置系统变量OpenSSL_Home,并将其指向OpenSSL的安装目录(C:\OpenSSL)。 OpenSSL_Home=C:\OpenSSL 同时,将其执行目录(%OpenSSL_Home%\bin;)加入系统变量Path中。 Path=%OpenSSL_Home%/bin;%MAVEN_HOME%/bin;%FLEX_HOME%/bin 2. 工作目录 打开OpenSSL配置文件openssl.cfg(%OpenSSL_Home%\bin\openssl.cfg),找到配置[CA_default] 注意变量dir,它指向的是CA工作目录,本文将路径D:/ca作为CA工作目录,对变量dir做相应修改。对于其他变量,我们无需 修改。 建立CA工作目录后,我们需要构建一些子目录,用于存放证书、密钥等。 1)构建CA子目录 echo 构建已发行证书存放目录certs mkdir certs echo 构建新证书存放目录newcerts mkdir newcerts echo 构建私钥存放目录private mkdir private echo 构建证书吊销列表存放目录crl mkdir crl 2)构建相关文件 echo 构建索引文件index.txt echo 0>index.txt echo 构建序列号文件serial http://zhanjia.iteye.com 1.1 小蚂蚁-CAS单点登录系列(1)-基础知识 第 9 / 41 页 echo 01>serial 3. 构建根证书 // 在构建根证书前,需要构建随机数文件(.rand) openssl rand -out private/.rand 1000 // 构建根证书私钥(ca.key.pem),这时我们需要输入根证书密码“123456” openssl genrsa -aes256 -out private/ca.key.pem 2048 // 生成根证书签发申请文件(ca.csr),这时我们需要输入根证书密码“123456” openssl req -new -key private/ca.key.pem -out private/ca.csr -subj "/C=CN/ST=BJ/L=BJ/O=zlex/OU=zlex/ CN=*.zlex.org" // 得到根证书签发申请文件后,我们可以将其发送给CA机构签发。当然,我们也可以自行签发根证书。 // 签发根证书,这时我们需要输入根证书密码“123456” openssl x509 -req -days 10000 -sha1 -extensions v3_ca -signkey private/ca.key.pem -in private/ca.csr -out certs/ ca.cer // OpenSSL产生的数字证书不能在Java语言环境中直接使用,需要将其转化为PKCS#12编码格式。 // 根证书转换,这时我们需要输入根证书密码“123456” openssl pkcs12 -export -cacerts -inkey private/ca.key.pem -in certs/ca.cer -out certs/ca.p12 // 个人信息交换文件(PKCS#12)可以作为密钥库或信任库使用,我们可以通过KeyTool查看该密钥库的详细信息。 keytool -list -keystore certs/ca.p12 -storetype pkcs12 -v -storepass 123456 4. 构建服务器证书 // 服务器证书的构建与根证书构建相似,首先需要构建服务器私钥,这时我们需要输入服务器证书密码“123456” openssl genrsa -aes256 -out private/server.key.pem 2048 // 完成服务器证书密钥构建后,我们需要产生服务器证书签发申请,这时我们需要输入服务器证书密码“123456” openssl req -new -key private/server.key.pem -out private/server.csr -subj "/C=CN/ST=BJ/L=BJ/O=zlex/OU=zlex/ CN=www.zlex.org" // 我们已经获得了根证书,可以使用根证书签发服务器证书 http://zhanjia.iteye.com 1.1 小蚂蚁-CAS单点登录系列(1)-基础知识 第 10 / 41 页 openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certs/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/server.csr -out certs/server.cer // 将OpenSSL产生的数字证书转化为PKCS#12编码格式,这时我们需要输入服务器证书密码“123456” openssl pkcs12 -export -clcerts -inkey private/server.key.pem -in certs/server.cer -out certs/server.p12 现在,我们已经构建了服务器证书(server.cer),并可使用该证书构建基于单向认证的网络交互平台。 5. 构建客户证书 // 客户证书的构建与服务器证书构建基本一致,首先需要构建私钥 // 产生客户私钥,这时我们需要输入客户证书密码“123456” openssl genrsa -aes256 -out private/client.key.pem 2048 // 生成客户证书签发申请,这时我们需要输入客户证书密码“123456” openssl req -new -key private/client.key.pem -out private/client.csr -subj "/C=CN/ST=BJ/L=BJ/O=zlex/OU=zlex/ CN=zlex" // 签发客户证书。如果在第2点配置有问题,有可能报错: I am unable to access the ./demoCA/newcerts directory ./demoCA/newcerts: No such file or directory openssl ca -days 3650 -in private/client.csr -out certs/client.cer -cert certs/ca.cer -keyfile private/ca.key.pem // 客户证书转换 openssl pkcs12 -export -inkey private/client.key.pem -in certs/client.cer -out certs/client.p12 http://zhanjia.iteye.com 1.1 小蚂蚁-CAS单点登录系列(1)-基础知识 第 11 / 41 页 1.2 小蚂蚁-CAS单点登录系列(2)-初步认识CAS 发表时间: 2010-08-12 关键字: Tomcat, SSO, 应用服务器, 浏览器, 企业应用 1.CAS介绍    CAS(Central Authentication Service,即中央认证服务),是Yale大学发起的一个开源单点登录项目,旨在为应用系 统提供一种可靠的单点登录方法。于2004年12月正式成为JA-SIG的一个项目。 2.CAS特点 • 开源的企业级单点登录解决方案 • CAS被设计成一个独立的Web应用程序(cas.war) • CAS Client支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括Java、.Net、PHP、Perl、 Apache、uPortal等 • 能够与uPortal, BlueSocket, TikiWiki, Mule, Liferay, Moodle等集成使用。 3.CAS 原理和协议    从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工 作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。 图1 是 CAS 最基本的协议过程:    CAS Client 与受保护的客户端应用部署在一起,以 Filter 方式保护受保护的资源。对于访问受保护资源的每个 Web 请 求,CAS Client 会分析该请求的 Http 请求中是否包含 Service Ticket,如果没有,则说明当前用户尚未登录,于是将请求重 定向到指定好的 CAS Server 登录地址,并传递 Service (也就是要访问的目的资源地址),以便登录成功过后转回该地址。 用户在第 3 步中输入认证信息,如果登录成功,CAS Server 随机产生一个相当长度、唯一、不可伪造的 Service Ticket,并 缓存以待将来验证,之后系统自动重定向到 Service 所在地址,并为客户端浏览器设置一个 Ticket Granted http://zhanjia.iteye.com 1.2 小蚂蚁-CAS单点登录系列(2)-初步认识CAS 第 12 / 41 页 Cookie(TGC),CAS Client 在拿到 Service 和新产生的 Ticket 过后,在第 5,6 步中与 CAS Server 进行身份合适,以确 保 Service Ticket 的合法性。    在该协议中,所有与 CAS 的交互均采用 SSL 协议,确保,ST 和 TGC 的安全性。协议工作过程中会有 2 次重定向的过 程,但是 CAS Client 与 CAS Server 之间进行 Ticket 验证的过程对于用户是透明的。 另外,CAS 协议中还提供了 Proxy (代理)模式,以适应更加高级、复杂的应用场景,具体介绍可以参考 CAS 官方网站上 的相关文档。 以上大部分内容摘自 :http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/index.html 4.准备工作 JA-SIG官方网站:http://www.jasig.org/cas CAS Server下载地址:http://www.jasig.org/cas/download CAS Client下载地址:http://downloads.jasig.org/cas-clients/ 官方CAS Client for Java 3.1文档:https://wiki.jasig.org/display/CASC/CAS+Client+for+Java+3.1 Tomcat 6下载地址:http://archive.apache.org/dist/tomcat/tomcat-6/ 在此,笔者分别使用cas-server-3.3.3、cas-client-3.1.10(支持单点登出)和Tomcat 6.0.18。 5.部署CAS Server    解压cas-server-3.3.3包,将modules/cas-server-webapp-3.3.3.war复制到Tomcat的webapps目录下,并重命名为 cas3.war,启动Tomcat。启动完毕后,访问地址:http://localhost:8080/cas3/login,我们将看到中央认证服务中用于收集 用户凭证的入口界面: http://zhanjia.iteye.com 1.2 小蚂蚁-CAS单点登录系列(2)-初步认识CAS 第 13 / 41 页    默认时,只要用户输入相同的用户名和密码,就可以登录到CAS服务器中。比如输入用户名/密码:admin/admin,单 击“登录”后将成功进入以下成功提示界面: http://zhanjia.iteye.com 1.2 小蚂蚁-CAS单点登录系列(2)-初步认识CAS 第 14 / 41 页    当成功登录到CAS服务器后,浏览器会存储CAS服务器返回的一个Cookie,其名字默认为“CASTGC”。当目标Web应 用实施了CAS SSO之后,它们便需要借助于这一Cookie实现Web SSO会话。由此建立了用户与CAS服务器之间的信任关系。    此时,如果用户需要退出,可以通过http://localhost:8080/cas3/logout退出CAS服务器。退出操作将导致浏览器中存 在的CASTGC Cookie被销毁,即销毁CAS与当前用户已建立的信任关系(Web SSO会话)。事实上,由于我们使用的是 HTTP协议操控logout,因此浏览器中的CASTGC Cookie并未被销毁。如果借助于HTTPS操控logout,则浏览器中的 CASTGC Cookie便会被销毁掉。在未启用HTTPS时,如果使用IE,可以通过关闭浏览器以达到销毁CASTGC Cookie的目 的。 http://zhanjia.iteye.com 1.2 小蚂蚁-CAS单点登录系列(2)-初步认识CAS 第 15 / 41 页 1.3 小蚂蚁-CAS单点登录系列(3)-简单实施SSO 发表时间: 2010-08-15 关键字: SSO, Tomcat, Servlet, Web, Security    默认时,为了启用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 http://zhanjia.iteye.com 1.3 小蚂蚁-CAS单点登录系列(3)-简单实施SSO 第 16 / 41 页 2.启用HTTPS 2.1.在Tomcat中启用HTTPS配置 打开Tomcat目录下的conf/server.xml文件,添加Connector代码如下: 其中: keystoreFile指向密钥库文件root.keystore keystorePass默认为changeit truststoreFile指向jre信任的证书库文件 2.2.安装证书    启动Tomcat,访问地址:https://localhost:8443/cas3,浏览器将会返回证书错误界面: http://zhanjia.iteye.com 1.3 小蚂蚁-CAS单点登录系列(3)-简单实施SSO 第 17 / 41 页 单击“继续浏览此网站(不推荐)”链接,查看并将证书导入到浏览器中: 单击“查看证书”,弹出证书安装界面: http://zhanjia.iteye.com 1.3 小蚂蚁-CAS单点登录系列(3)-简单实施SSO 第 18 / 41 页 单击“安装证书”,进入证书导入向导界面: http://zhanjia.iteye.com 1.3 小蚂蚁-CAS单点登录系列(3)-简单实施SSO 第 19 / 41 页 选择“受信任的根证书颁发机构”,接下来只需要一路选择“下一步”或者“是”直至导入成功。 证书导入成功后,重新浏览器并访问地址: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 http://zhanjia.iteye.com 1.3 小蚂蚁-CAS单点登录系列(3)-简单实施SSO 第 20 / 41 页 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 http://zhanjia.iteye.com 1.3 小蚂蚁-CAS单点登录系列(3)-简单实施SSO 第 21 / 41 页 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登录用户的登录名,可选配置。配置如下: http://zhanjia.iteye.com 1.3 小蚂蚁-CAS单点登录系列(3)-简单实施SSO 第 22 / 41 页 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 http://zhanjia.iteye.com 1.3 小蚂蚁-CAS单点登录系列(3)-简单实施SSO 第 23 / 41 页 3.2.3.启动应用 配置完成后,重新启动Tomcat,并访问地址http://localhost:8080/examples/servlets/servlet/HelloWorldExample, 由于该servlet已受到Cas的保护,所以我们会被引导到Cas登录页面。 只有通过Cas认证,才能真正的访问到http://localhost:8080/examples/servlets/servlet/HelloWorldExample这个 servlet。 附件下载: • filter和listener代码.zip (538 Bytes) • dl.iteye.com/topics/download/aab6f5f4-eb1d-30b4-854a-00f075c9b58a http://zhanjia.iteye.com 1.3 小蚂蚁-CAS单点登录系列(3)-简单实施SSO 第 24 / 41 页 1.4 小蚂蚁-CAS单点登录系列(4)-使用RDBMS认证 发表时间: 2010-08-17 关键字: JDBC, MySQL, Bean, Tomcat, 配置管理    在实际应用中,用户认证信息一般会存放在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', '21232f297a57a5a743894a0e4a801fc3', '男', '26'); INSERT INTO `users` VALUES ('2', 'javaee', '21232f297a57a5a743894a0e4a801fc3', '男', '26'); 密码均为admin 。 3.添加数据库信息 打开cas3的WEB-INF/cas.properties文件,添加数据库相关信息: http://zhanjia.iteye.com 1.4 小蚂蚁-CAS单点登录系列(4)-使用RDBMS认证 第 25 / 41 页 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实现方式。那么具体需要如何来实 http://zhanjia.iteye.com 1.4 小蚂蚁-CAS单点登录系列(4)-使用RDBMS认证 第 26 / 41 页 现,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加密编码器 5.2.3.添加RDBMS认证处理器 替换authenticationHandlers中的SimpleTestUsernamePasswordAuthenticationHandler认证处理器,代码如下: 5.2.4.验证配置    经过以上几个步骤,对于数据库认证的配置已经完成。接下来,我们启动Tomcat进行测试。启动完毕后,使用admin或 javaee用户登录CAS认证服务器,如果登录成功,我们将会在Tomcat日志中看到类似信息: http://zhanjia.iteye.com 1.4 小蚂蚁-CAS单点登录系列(4)-使用RDBMS认证 第 27 / 41 页    从日志信息中可以看到,我们的确成功的借助于QueryDatabaseAuthenticationHandler对用户进行了认证。 http://zhanjia.iteye.com 1.4 小蚂蚁-CAS单点登录系列(4)-使用RDBMS认证 第 28 / 41 页 1.5 小蚂蚁-CAS单点登录系列(5)-简单实施SSO之二 发表时间: 2010-08-24 关键字: SSO, Tomcat, Bean, Web, Spring    在本系列文章的第3篇中,讲解了使用CAS实施单点登录的简单过程。    首先,CAS客户端的配置使用最简单的配置方式,全部配置都放在web.xml文件中。虽然这种配置方式很 明了,但存在几个缺点。这种配置方式不仅使web.xml文件显得臃肿,而且相关属性的配置不够灵活,不易于 管理。    其次,采用了keytool生成证书。尽管直接借助于keytool能够获得自签名的X.509证书,但keytool工具不 支持签署其他证书。因此,在需要签署其他证书的时候,必须使用其他证书管理工具。    鉴于以上问题,本节将采用Spring过滤链的配置方式配置CAS Client,将臃肿的配置信息从web.xml中抽 取出来,简化web.xml文件。使用OpenSSL管理证书,以弥补keyool的种种不足。 1.准备环境 操作系统:32位Window XP CAS服务器:Cas Server 3.3.3 CAS客户端:Cas Client 3.1.10 Web服务器:Tomcat 6.0.18 数据库:MySQL 5.0 JDK:jdk1.5.0_10 2.基础环境准备    JDK安装后,复制两份 jdk1.5.0_10,分别命名为jdk_cas 和jdk_client 。    同样,复制两份 Tomcat 6.0.18,分别命名为apache-tomcat-cas 和apache-tomcat-client 。    配置Tomcat对应的JDK。打开apache-tomcat-cas/bin/catalina.bat 文件,在rem Guess CATALINA_HOME if not defined这行之前添加:set JAVA_HOME=您的安装路径/jdk_cas ,然后保存。同 样方式配置apache-tomcat-client ,这样启动apache-tomcat-cas将使用jdk_cas,启动apache-tomcat- client将使用jdk_client。 3.生成证书    OpenSSL工具的安装配置请参考本系列文章的第1篇,接下来将生成根证书和服务器证书。    创建三个目录C:/openssl、C:/openssl/root、C:/openssl/server。然后在命令行下进入C:/openssl目录。    (注:整个过程中涉及到密码的地方均使用password ) 3.1.创建根证书 http://zhanjia.iteye.com 1.5 小蚂蚁-CAS单点登录系列(5)-简单实施SSO之二 第 29 / 41 页 //创建私钥 openssl genrsa -out root/root-key.pem 1024 //创建证书请求 openssl req -new -out root/root-req.csr -key root/root-key.pem //证书信息,按顺序输入,最后一个选项An optional company name直接回车 CN GuangDong GuangZhou JavaEECas Programmer root root@163.com password //自签署根证书 openssl x509 -req -in root/root-req.csr -out root/root-cert.pem -signkey root/root-key.pem -days 3650 //将根证书导出成浏览器支持的.p12(PKCS12)格式 openssl pkcs12 -export -clcerts -in root/root-cert.pem -inkey root/root-key.pem -out root/root.p12 3.2.创建服务器证书 //创建私钥 openssl genrsa -out server/server-key.pem 1024 //创建证书请求 openssl req -new -out server/server-req.csr -key server/server-key.pem //证书信息 CN GuangDong GuangZhou JavaEECas Programmer localhost localhost@163.com password http://zhanjia.iteye.com 1.5 小蚂蚁-CAS单点登录系列(5)-简单实施SSO之二 第 30 / 41 页 //签署服务器证书 openssl x509 -req -in server/server-req.csr -out server/server-cert.pem -signkey server/server- key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650 //将客户证书导出成浏览器支持的.p12(PKCS12)格式 openssl pkcs12 -export -clcerts -in server/server-cert.pem -inkey server/server-key.pem -out server/ server.p12 4.启用HTTPS 4.1.在apache-tomcat-cas中启用HTTPS    打开apache-tomcat-cas/conf/server.xml,在下面添加以下代码:    其中,keystoreFile和truststoreFile根据实际情况进行修改。 4.2.导入证书    为了使客户端信任CAS Server,我们必须在客户端导入根证书。操作步骤: http://zhanjia.iteye.com 1.5 小蚂蚁-CAS单点登录系列(5)-简单实施SSO之二 第 31 / 41 页 1、打开Internet选项->证书->受信任的根证书颁发机构->导入->下一步,选择root.p12文件 2、输入密码 3、 选择证书存储位置 http://zhanjia.iteye.com 1.5 小蚂蚁-CAS单点登录系列(5)-简单实施SSO之二 第 32 / 41 页 接着“下一步”直到导入成功。 4、查看已导入的证书 http://zhanjia.iteye.com 1.5 小蚂蚁-CAS单点登录系列(5)-简单实施SSO之二 第 33 / 41 页 4.3.测试HTTPS    启动Tomcat,访问https://localhost:8443/,如果能够看到以下界面,地址栏右边出现锁图标,则说明 HTTPS启用成功。 5.使用RDBMS认证    我们将采用“小蚂蚁-CAS单点登录系列(4)-使用RDBMS认证 ”一节所使用的cas3作为CAS认证服务器, 将其拷贝到apache-tomcat-cas/webapps目录下。同时,别忘了把mysql驱动拷贝到cas3/WEB-INF/lib或 apache-tomcat-cas/lib目录下。    重新启动Tomcat,如果测试使用数据库认证信息登录成功,说明CAS认证服务器配置完成。 6.配置客户端    创建Web应用client3,添加三个包cas-client-core-3.1.10.jar、commons-logging-1.0.4.jar、 spring-2.5.6.jar。 6.1.修改apache-tomcat-client端口    总共有三个端口需要修改,分别是默认的Server元素的port="8005"、Connector元素port="8080"、 Connector元素port="8009",笔者分别修改为9005、9090、9009。 6.2.Web.xml配置 http://zhanjia.iteye.com 1.5 小蚂蚁-CAS单点登录系列(5)-简单实施SSO之二 第 34 / 41 页 client3.1.10 contextConfigLocation /WEB-INF/classes/spring-appContext.xml encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true CAS Single Sign Out Filter org.jasig.cas.client.session.SingleSignOutFilter CAS Authentication Filter org.springframework.web.filter.DelegatingFilterProxy targetBeanName authenticationFilter http://zhanjia.iteye.com 1.5 小蚂蚁-CAS单点登录系列(5)-简单实施SSO之二 第 35 / 41 页 CAS Validation Filter org.springframework.web.filter.DelegatingFilterProxy targetBeanName ticketValidationFilter CAS HttpServletRequestWrapperFilter org.springframework.web.filter.DelegatingFilterProxy targetBeanName casHttpServletRequestWrapperFilter CAS AssertionThreadLocalFilter org.jasig.cas.client.util.AssertionThreadLocalFilter encodingFilter /* CAS Single Sign Out Filter /* http://zhanjia.iteye.com 1.5 小蚂蚁-CAS单点登录系列(5)-简单实施SSO之二 第 36 / 41 页 CAS Authentication Filter /secure/* CAS Validation Filter /secure/* CAS HttpServletRequestWrapperFilter /secure/* CAS AssertionThreadLocalFilter /secure/* org.springframework.web.context.ContextLoaderListener org.jasig.cas.client.session.SingleSignOutHttpSessionListener 6.3.添加资源文件    在类路径下新建文件cas-client.properties,内容如下:    cas.server.url=https://localhost:8443/cas3    cas.client.serverName=localhost:9090 http://zhanjia.iteye.com 1.5 小蚂蚁-CAS单点登录系列(5)-简单实施SSO之二 第 37 / 41 页    第一行指定CAS服务器地址 ,第二行指定客户端服务名称,格式为:主机名:端口号 6.4.添加Spring配置文件    在类路径下新建文件spring-appContext.xml,内容如下: http://zhanjia.iteye.com 1.5 小蚂蚁-CAS单点登录系列(5)-简单实施SSO之二 第 38 / 41 页 6.5.导入根证书    由于CAS Server启用了HTTPS,要使Web客户端信任其身份,必须为jdk_client 导入根证书。 keytool -import -v -trustcacerts -storepass changeit -alias root -file root/root-cert.pem -keystore E:/ DevelopTools/JDK/jdk_client/jre/lib/security/cacerts 7.综合测试 7.1.启动apache-tomcat-cas 7.2.启动apache-tomcat-client 7.3.访问client3    访问http://localhost:9090/client3/secure/securedpage.jsp页面,将被引导到CAS登录页面。输入凭证 http://zhanjia.iteye.com 1.5 小蚂蚁-CAS单点登录系列(5)-简单实施SSO之二 第 39 / 41 页 信息,认证通过后将出现以下页面:    访问http://localhost:9090/client3/secure/debug.jsp页面,可以看到通过三种不同的方式获取用户名。 http://zhanjia.iteye.com 1.5 小蚂蚁-CAS单点登录系列(5)-简单实施SSO之二 第 40 / 41 页    在http://localhost:9090/client3/secure/securedpage.jsp页面中,单击“退出”链接将单点退出系统。 8.可能遇到的问题 8.1报错 : 'unable to find valid certification path to requested target' 原因 : Web应用服务器端没有导入根证书 解决方法 : 在jdk_client导入根证书。 至此,本节内容结束,有遗漏或疏忽的地方请大家指出,谢谢! 附件下载: • client3.zip (2.6 MB) • dl.iteye.com/topics/download/374d60d2-1fc2-3070-a582-a8b9d990832f http://zhanjia.iteye.com 1.5 小蚂蚁-CAS单点登录系列(5)-简单实施SSO之二 第 41 / 41 页
还剩40页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 5 人已下载

下载pdf

pdf贡献者

ppmnyw

贡献于2012-10-24

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf