首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

构建和兑现单点登录

2012-10-27 
构建和实现单点登录转自http://www.ibm.com/developerworks/cn/web/wa-singlesign/?简介:?在现有的应用程

构建和实现单点登录

转自http://www.ibm.com/developerworks/cn/web/wa-singlesign/

?

简介:?在现有的应用程序中实现单点登录解决方案(single sign-on,SSO,即登录一次,就可以向所有网络资源验证用户的身份)是非常困难的,但是在构建复杂的门户时,每个开发人员都要面对这个问题。因为门户需要与后端资源集成,而每个后端资源都有自己的身份验证需求,所以门户常常必须向用户提供单点登录特性。在本文中,Chris Dunne 一步步地描述了他为一个 Web 门户构建单点登录解决方案的经历。他将讲解如何设置一个开放源码解决方案(来自 Yale University 的 Central Authentication Service),以及如何将它扩展为根据 Microsoft Active Directory 基础设施进行身份验证。

?

我在自己的工作中发现,对各种门户应用程序的需求正在增长。门户的技术和功能性需求变得越来越复杂了。尽管出现了可以构建简单门户的工具,但是门户与远程或遗留数据源的集成问题仍然不容易解决。其中一个问题就是身份验证。

?

身份验证是个复杂的问题。门户需要向后端数据源和应用程序验证用户的身份,但是这些应用程序可能具有互不相同的底层安全基础设施。理想的最高效的身份验证解决方案是单点登录(single sign-on,SSO) 解决方案;在这种解决方案中,用户只需要登录一次,就可以向所有网络资源验证他的身份。

?

最近,在构建一个需要 SSO 的教育门户时,我研究了许多商业的和开放源码的 SSO 解决方案。在本文中,我将一步步地介绍使用免费的 SSO 实现(来自 Yale University 的 CAS)构建简单 SSO 系统的过程。

?

?

在创建 LoginContext 时,传递这个类名和 CASCallbackHandler 对象。JAAS 配置文件指定这个类使用的登录模块。

?

在调用 login() 方法时,登录模块知道为了进行身份验证它需要从用户/应用程序获得哪些信息。在使用 Kerberos 时,它需要用户名和密码,所以它构造一个数组,其中包含两个回调对象(NameCallbackPasswordCallback),然后调用 CallbackHandler 对象,这个对象决定如何执行这些回调并获得用户名和密码。

?

我采用最简单最有利的方式,使用 CallbackHandler 上的 setter 方法显式地设置用户 ID 和密码。然后,CallbackHandler 将它们传递给 NameCallbackPasswordCallback 对象。

?

清单 4. 用 setName (CASUserId) 和 setPassword (CASPassword) 设置 ID 和密码

<!-- Authentication handler -->    <context-param>        <param-name>edu.yale.its.tp.cas.authHandler</param-name>        <param-value>             edu.yale.its.tp.cas.auth.provider.KerberosAuthHandler        </param-value>    </context-param>

?

ZIP 文件(参考资料 中的 KerberosAuthSrc.zip)中包含一个 web.xml 示例。

?

必须重新启动 Tomcat,但是这一次还需要设置一些 Java 运行时属性。对 ZIP 文件(KerberosAuthSrc.zip)进行解压,并将文件 cas_jaas.conf、krb5.conf 和 setkerberosjvmoptions.bat 复制到 TOMCAT_HOME 目录中。运行 setkerberosjvmoptions.bat,然后启动 Tomcat。

?

现在,可以再用 HelloWorld 应用程序做实验了。这一次,可以使用 Active Directory Server 中定义的有效的 Kerberos 用户名和密码对。

?

结束语

如果没有统一的策略,开发人员就要为每个网络应用程序重复实现定制的安全机制。这会导致各种可伸缩性和维护问题。单点登录解决方案为安全性和身份验证提供了统一的框架,这大大减轻了用户、管理员和开发人员的负担。

?

单点登录的概念、技术和蕴涵对用户和管理员而言很复杂,我在本文中只触及了这个领域的皮毛。但是,我解释了如何使用 Yale University 的 CAS 系统实现一个单点登录方案,还详细描述了如何扩展这种技术,从而对 LDAP 服务器用户(具体地说,是使用 Kerberos 协议的 Active Directory Server)进行身份验证。

?

参考资料

您可以参阅本文在 developerWorks 全球网站上的 英文原文。

下载本文中使用的 CAS 服务器和客户机库。

下载本文中使用的 Tomcat web.xml for CAS,包括设置 SSL 的说明。

下载本文中使用的 KerberosAuthHandlerCASCallBackHandler 代码。

阅读 “Using CAS at Yale: A Quick Introduction”。这篇文章详细描述 CAS 的组件,解释什么时候应该使用它,并演示使用它进行用户身份验证的最简单方法。

阅读 “CAS 2.0: Proxiable Credentials”,了解这次 CAS 升级的原因以及系统的新特性和改进。

阅读 “将 Web 服务用于电子交易的单点登录”(developerWorks,2002 年 1 月),了解如何将 electronic Customer Relationship Management(eCRM)应用程序集成进现有的电子商务市场应用程序中,从而向用户提供单点登录体验。

阅读文章 “Simplify enterprise Java authentication with single sign-on”(developerWorks,2003 年 9 月),了解如何使用 GSS-API 和 Kerberos 标准在 Java 平台上实现 SSO 来处理安全问题。

通过 “WebSphere and Domino single sign-on”(developerWorks,2001 年 1 月),了解 Lightweight Third Party Authentication(LTPA)的细节,这是服务器把单点登录身份验证任务委托给一个公用第三方服务的一种方法。

阅读 “Java 安全性, 第二部分: 认证与授权 ”(developerWorks,2002 年 7 月),这个教程介绍了身份验证和授权的基本概念,概述了 JAAS 的架构。

访问 ITS Central Authentication Service 站点,这里解释了 CAS 1.0 的设计和实现思想。

访问 Tips for LDAP Users 站点,了解如何使用不同的安全身份验证机制和 SSL(Secure Socket Layer)访问 LDAP 服务。

访问 Security Guide, Kerberos chapter,了解安全远程命令、使用 Kerberos 向 AIX 进行身份验证以及关于 Kerberos 故障检修的信息。