单点登录

   http://www.docin.com/p-38012800.html#

将一个开放源代码(CAS)基于Java的身份验证组件集成进Web门户中。

1。 SSO只处理身份验证,所以应用程序可能仍然需要设置用户的属性(比如访问特权);

2。SSO缺点: 难以重构; 增加了安全风险,因为恶意用户可以访问所有获得授权的资源。

3。单点攻击。

一、限制搜索范围

  • Java实现。这个门户应用程序基础设施是基于Java的,希望SSO实现也是基于Java语言的。
  • 容易实现。在这个场景中,容易实现是指不需要对基础设施或现有的应用程序做大量修改。
  • 其效果已经得到证明。它应该已经被一些大型组织采用,而且仍然处于活跃的开发阶段。
  • 与LDAP(轻量级目录访问协议)兼容。

二、CAS

      使用CAS系统开发一个原型,它满足上述所有条件。它是基于Java的,源代码是开放的。只需使用JSP标记和Servlet过滤器,就能够相当轻松地在Java应用程序环境中实现它。它还允许轻松地改变或扩展实际的身份验证机制(无论是查询数据库还是LDAP服务器上的用户名和密码)。

      主要是在安全机制上:在采用CAS协议时,应用程序不会看到用户的密码。CAS服务器执行身份验证,只有它能够看到用户的密码。这会增强安全性,因为用户名和密码并不通过网络传递给其他应用程序。

 

  • 用户尝试使用应用程序的URL访问应用程序。用户被重定向到CAS登录URL,采用的是HTTPS连接,他请求的服务的名称作为参数传递。这时向用户显示一个用户名、密码对话框。
  • 用户输入ID和密码,CAS对他进行身份验证。如果身份验证失败,目标应用程序根本不会知道这个用户曾经试图访问它--用户在CAS服务器上就被拦住了。
  • 如果身份验证成功,CAS就将用户重定向回目标应用程序,并在URL中附加一个称为ticket的参数。然后,CAS尝试创建一个称为ticket-granting cookie的内存cookie。这是为了以后进行自动的重新验证;如果存在这个cookie,就表示这个用户已经成功地登录了,用户就不需要再次输入他的用户名和密码。
  • 然后,应用程序要检查这个ticket是否正确,以及是否代表一个有效用户:检查的方法是,打开一个HTTPS连接来调用CAS serviceValidate URL,并作为参数传递ticket和服务名称。CAS检查这个ticket是否有效,以及是否与请求的服务相关联。如果检查成功,CAS就将用户名返回给应用程序。

如果采用Servlet2.3 规范进行开发,那么甚至不需要为这些步骤操心,一个servlet过滤器会处理整个协议。您要做的只是在web.xml文件中配置过滤器参数。采用这个方式---它意味着对门户中应用程序代码的修改非常少。

http://wenku.baidu.com/view/3bebf9254b35eefdc8d3333f.html

  • 单点登录的实现机制:

      SSO的实现机制不尽相同,大体分为Cookie机制和Session机制两大类。

      Session共享认证信息。Session是一种服务器端机制,当客户端访问服务器时,服务器为客户端创建一个惟一的SessionID,以使在整个交互过程中始终保持状态,而交互的信息则可由应用自行指定,因此用Session方式实现SSO,不能再多个浏览器之间实现单点登录,但却可以跨域。

      Cookie记录认证信息。Cookie是一种客户端机制,它存储的内容主要包括:名字、值、过期时间、路径和域,路径与域合在一起就构成了Cookie的作用范围,因此用Cookie方式可实现SSO,但域名必须相同。

      目前大部分SSO产品采用的是Cookie机制,CAS也是如此。

-----但要注意: 这种机制要求实现单点登录的应用,其域名必须是相同的。例如: a.chinacreator.com, b.chinacreator.com就可以经过配置后实现SSO。

      原理:

  • 首先, 单点登录分为“服务器”和“客户端”。服务器就是单点登录服务器,而客户端通常是“函数库”或者“插件”。需要使用单点登录的应用程序,需要把客户端插件安装到自己的额系统中,或者将客户端函数库包括在代码中。单点登录的客户端通常替换了原来应用程序的认证部分的代码。
  • 某个应用程序首先要发起第1次认证。大部分情况下,应用程序中嵌入的客户端会把应用程序原来的登录画面屏蔽掉,而直接接转到单点登录服务器的登录页面。
  • 用户在单点登录服务器的登录页面中,输入用户名和密码。
  • 然后单点登录服务器会对用户名和密码进行认证。认证本身并不是单点登录服务器的功能。因此,通常会引入某种认证机制,认证机制可以有很多种,例如自己写一个认证程序,或者使用一些标准的认证方法,例如: LDAP 或者数据库等等。在大多数情况下,会使用LDAP进行认证,这是因为LDAP在处理用户登录方面,有很多独特的优势。
  • 认证通过后,单点登录服务器会和应用程序进行一个比较复杂的交互,这通常是某种授权机制。CAS使用的是所谓的Ticket。
  • 授权完成后,CAS把页面重定向,回到Web应用。 Web应用此时就完成了成功的登录(当然这也是单点登录的客户端,根据返回的Ticket信息进行判断成功的)。
  • 然后单点登录服务器会在客户端创建一个Cookie。 注意,是在用户的客户端,而不是服务器创建一个Cookie。这个Cookie是一个加密的Cookie,其中保存了用户登录的信息。
  • 如果此时希望进入其他Web应用程序,则安装在这些应用程序中的单点登录客户端,首先仍然会重定向到CAS服务器。不过此时CAS服务器不再要求用户输入用户名和密码,而是首先自动寻找Cookie,根据Cookie中保存的信息,进行登录。 登录之后,CAS重定向回到用户的应用程序。

      这样,就不再需要用户继续输入用户名和密码,从而实现了单点登录。

      这种单点登录体系中,并没有通过http进行密码的传递(但是有用户名的传递),因此是十分安全的。

 

  • CAS : 应用程序可以通过三个URL路径来使用CAS。分别是:登录URL(loginURL),校验URL(validationURL)和登出URL(logoutURL)。
  •  

http://topic.csdn.net/u/20090722/21/d5292038-0d9e-41ba-8f00-f5610b2f5614.html

可以用CAS 与SPRING集成的方案
在spring中增加CAS的过滤包,开发量早小,

http://www.po-soft.com/hi/single/blog/67

到 CAS 官方网站下载 CAS Server 和 Client,地址分别为:

http://www.ja-sig.org/downloads/cas/cas-server-3.1.1-release.zip

http://www.ja-sig.org/downloads/cas-clients/ cas-client-java-3.0.0.zip

      CAS Server 是一套基于 Java 实现的服务,该服务以一个 Java Web Application 单独部署在与 servlet2.3 兼容的 Web 服务器上,另外,由于 Client 与 CAS Server 之间的交互采用 Https 协议,因此部署 CAS Server 的服务器还需要支持 SSL 协议。当 SSL 配置成功过后,像普通 Web 应用一样将 CAS Server 部署在服务器上就能正常运行了,不过,在真正使用之前,还需要扩展验证用户的接口。

在 Tomcat 上部署一个完整的 CAS Server 主要按照以下几个步骤:

       1、配置使用 Https 协议

如果希望 Tomcat 支持 Https,主要的工作是配置 SSL 协议,其配置过程和配置方法可以参考 Tomcat 的相关文档。不过在生成证书的过程中,会有需要用到主机名的地方,CAS 建议不要使用 IP 地址,而要使用机器名或域名。

具体配置可参考以下内容

我们使用keytool工具创建keystore文件。可以在<JAVA_HOME>/bin目录中找到keytool工具。

1.     生成密钥对
keytool -genkey -alias tomcat-server -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore
2  将服务器证书导出为证书文件:
keytool -export -alias tomcat-server -storepass changeit -file server.cer -keystore server.keystore 
输入密码(changeit):
Keytool返回下列消息:
Certificate stored in file <server.cer>

3 用keytool在所选的keystore文件中创建客户端证书:

keytool -genkey -alias tomcat-client -keyalg RSA -keypass changeit -storepass changeit -keystore client.keystore

4 将新客户端证书从keystore导出到证书文件:

keytool -export -alias tomcat-client -storepass changeit -file client.cer -keystore client.keystore

输入keystore密码(changeit)。Keytool将返回该消息:

Certificate stored in file <client.cer>

5 将上述步骤所得到的tomcat根目录下server.cer以及client.cer证书文件导入到cacerts 文件中,
cacerts文件默认生成在tomcat根目录下

keytool -import -trustcacerts -alias server -file server.cer -keystore cacerts -storepass changeit

keytool -import -trustcacerts -alias client -file client.cer -keystore cacerts -storepass changeit

6在tomcat根目录下找到cacerts文件,拷贝到<JAVA_HOME>\jre\lib\security文件下

从下载得cas-server3最新版本中找到target文件下面得cas.war,拷贝到<TOMCAT_HOME>/webapp目录下
,修改<TOMCAT_HOME>/conf下面得server.xml文件,添加如下:

<Connector port="8443" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" disableUploadTimeout="true"
               acceptCount="100" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" keystoreFile="/server.keystore" keystorePass="changeit"/>

特别提示: 在以上配置CAS SSL之后,个人实践感觉很不好。老是弹出,安全提示。感觉对用户不好。不知道哪位高手有好的办法。我的解决办法是修改源代码,不用https,就不用提示了。这个方法在以后的cas 系列文章中也说说。

       2、部署CAS server

       CAS Server 是一个 Web 应用包,将前面下载的 cas-server-3.1.1-release.zip 解开,把其中的 cas-server-webapp-3.1.1.war 拷贝到 tomcat的 webapps 目录,并更名为 cas.war。由于前面已配置好 tomcat 的 https 协议,可以重新启动 tomcat,然后访问:https://localhost:8443/cas ,如果能出现正常的 CAS 登录页面,则说明 CAS Server 已经部署成功。

虽然 CAS Server 已经部署成功,但这只是一个缺省的实现,在实际使用的时候,还需要根据实际概况做扩展和定制,最主要的是扩展认证 (Authentication) 接口和 CAS Server 的界面。

界面在cas/WEB-INF/view/jsp/default。

           3、CAS客户端部署

准备好两个应用之后,在web.xml中,增加以下filter

<web-app>

...

<filter>

    <filter-name>CAS Filter</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>https://domainA:8443/cas/login</param-value>

    </init-param>

    <init-param>

      <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>

      <param-value>https://domainA:8443/cas/serviceValidate</param-value>

    </init-param>

    <init-param>

      <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>

      <param-value>domainB:8080</param-value>

    </init-param>

</filter>

<filter-mapping>

    <filter-name>CAS Filter</filter-name>

    <url-pattern>/protected-pattern/*</url-pattern>

</filter-mapping>

...

</web-app>

        4、在应用中,获取用户名

在jsp代码中,加入以下代码即可。

session.getAttribute(CASFilter.CAS_FILTER_USER);
session.getAttribute("edu.yale.its.tp.cas.client.filter.user");

你可能感兴趣的:(职场,登录,休闲,单点)