一. SSO (Single Sign-on)原理
SSO 分为Web-SSO和桌面SSO。桌面 SSO 体现在操作系统级别上。Web-SSO体现在客户端,主要特点是: SSO 应用之间使用 Web 协议 ( 如 HTTPS) ,并且只有一个登录入口。我们所讲的SSO,指 Web SSO 。
SSO 的体系中,有下面三种角:
User(多个)
Web应用(多个)
SSO认证中心(一个)
SSO 实现模式千奇百怪,但万变不离其宗,包含以下三个原则:
所有的登录都在 SSO 认证中心进行。
SSO 认证中心通过一些方法来告诉 Web 应用当前访问用户究竟是不是通过认证的用户。param name
SSO 认证中心和所有的 Web 应用建立一种信任关系。
二. CAS 的基本原理
CAS(Central Authentication Service) 是 Yale 大学发起的构建 Web SSO 的 Java开源项目。
1. CAS 的结构体系
CAS Server
CAS Server 负责完成对用户信息的认证,需要单独部署,CAS Server 会处理用户名 / 密码等凭证 (Credentials)
CAS Client
CAS Client部署在客户端,当有对本地 Web 应用受保护资源的访问请求,并且需要对请求方进行身份认证,重定向到 CAS Server 进行认证。
2. CAS 协议
基础协议
上图是一个基础的 CAS 协议, CAS Client 过滤器的方式保护 Web 应用的受保护资源,过滤从客户端过来的每一个 Web 请求,同时, CAS Client 会分析 HTTP 请求中是否包请求 Service Ticket( 上图中的 Ticket) ,如果没有,则说明该用户是没有经过认证的, CAS Client 会重定向用户请求到 CAS Server Step 2 )。 Step 3 是用户认证过程,如果用户提供了正确的认证信息 CAS Server 会产生一个随机的 Service Ticket 会向 User 发送一个 Ticket granting cookie (TGC) 给 User 的浏览器,并且重定向用户到 CAS Client (附带刚才产生的 Service Ticket),Step 5 Step6 CAS Client CAS Server 之间完成了一个对用户的身份核实,用 Ticket 查到 Username ,认证通过。
3. CAS 如何实现 SSO
当用户访问Helloservice2再次被重定向到 CAS Server 的时候, CAS Server 会主动获到这个 TGC cookie ,然后做下面的事情:
1) 如果 User 的持有 TGC 且其还没失效,那么就走基础协议图的 Step4 ,达到了 SSO 的效果。
2) 如果 TGC 失效,那么用户还是要重新认证 ( 走基础协议图的 Step3) 。
三. 实践配置
下面我们以tomcat 5.5 为例进行说明(这里,我将ServerClient同时放在了同一个Tomcat服务器下)
软件环境:tomcat 5.5  ant-1.6.5,  jdk1.5.0_06
下载cas-server-3.0.4.zipcas-clientcas-server-jdbc-3.0.5-rc2.jarmysql 5.0.16和tomcat 5.5.15
/downloads/cas/cas-server-3.0.4.zip www.yale.edu/tp/cas/cas-client-2.0.11.zip
/maven/cas/jars/cas-server-jdbc-3.0.5-rc2.jar
sql
/
(一) 将一个或者一些页面进行支持HTTPS传输协议(意义:对某些页面进行了安全传输)(重点掌握
1. 产生SERVER的证书库文件
keytool -genkey -alias tomcat  -keyalg RSA [-keystore keystore-file]
并将证书文件放在web容器的目录下。
2. (server)配置tomcat使用HTTPS
$CATALINA_HOME/l
  <Connector port="8443" maxHttpHeaderSize="8192"
                            keystorePass="changeit" keystoreFile="\conf\.keystore"
              maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
              enableLookups="false" disableUploadTimeout="true"
              acceptCount="100" scheme="https" secure="true"
              clientAuth="false" sslProtocol="TLS" />
注意:keystorePass="changeit"(这个问证书库文件的密码,也就是上面配置产生的一个密码) keystoreFile="/.keystore"(这是证书库文件的存放路径,其中根目录“/”为tomcat的安装路径)
3. 在l文件中增加
<security-constraint> 
    <web-resource-collection > 
          <web-resource-name >SSL</web-resource-name> <!--名字随便取--> 
          <url-pattern>/jsp2/el/*</url-pattern> 
      </web-resource-collection> 
      <user-data-constraint> 
          <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
      </user-data-constraint> 
</security-constraint>
解释:transport-guarantee元素指定了客户端和服务端的通信关系,有NONEINTEGRAL,CONFIDENTIALNONE表示着应用不需要任何传输保障。INTEGRAL表示着在数据在客户端到服务端的过程中不能有任何改变。CONFIDENTIAL表示在传输过程中防止其他传输内容的干扰。在使用SSl时常用的就INTEGRALCONFIDENTIL
4. 进行访问测试
(二) 实现CAS系统
1. 产生SERVER的证书库文件
keytool -genkey -alias tomcat  -keyalg RSA [-keystore keystore-file]
并将证书文件放在web容器的目录下。
2. (server)配置tomcat使用HTTPS
$CATALINA_HOME/l
  <Connector port="8443" maxHttpHeaderSize="8192"
                            keystorePass="changeit" keystoreFile="/.keystore"
              maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
              enableLookups="false" disableUploadTimeout="true"
              acceptCount="100" scheme="https" secure="true"
              clientAuth="false" sslProtocol="TLS" />
注意:keystorePass="changeit"(这个问证书库文件的密码,也就是上面配置产生的一个密码) keystoreFile="/.keystore"(这是证书库文件的存放路径,其中根目录“/”为tomcat
安装路径)
3. cas-server-3.0.4.zip解压,并将target/cas.war拷贝到webapps下。
4. cas-client-2.0.11.zip解压,把cas-client-2.0.11\java\lib\casclient.jar拷贝到client服务器上(这里为同一tomcat)书生读吧_{_w"n_L;G&m0\,w g_i_F9p
webapps/servlets-examples/WEB-INF/lib目录下(如果没有就建一个)
5. 在要使用CAS的客户端应用里设置(以servlets-examples这个APP为例,在应用时,所有客户端均进行类似配置),我们使用ServletFilter(CAS client里提供的)来实现SSO的检查。
修改servlets-examples/l
<filter>
<filter-name>CASFilter</filter-name>
<filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
<init-param><param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
<param-value>your.cas.server.name:port<!--这里是CAS serverloginURL-->/cas/login</param-value>
</init-param>
<init-param><param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>your.cas.server.name:port<!--这里是CAS serverURL验证器--> /cas/proxyValidate</param-value>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。