基于LDAP的单点登录方案的设计与实现(本科论文最终版)

ralphone

贡献于2015-01-26

字数:0 关键词: OpenID/单点登录SSO 方案

大 连 理 工 大 学 本 科 毕 业 设 计(论 文) 基于 LDAP LDAP LDAP LDAP 的单点登录方案的设计与实现 TheTheThe The designdesigndesign design andandand and implementationimplementationimplementation implementation ofofof of SSOSSOSSO SSO schemeschemescheme scheme basedbasedbased based ononon on LDAPLDAPLDAP LDAP 学 院(系): 专 业: 学 生 姓 名: 学 号: 指 导 教 师: 评 阅 教 师: 完 成 日 期: 大连理工大学 Dalian University of Technology 基于 LDAP 的单点登录方案的设计与实现 -I- 摘 要 随着信息化建设的不断深入,学校或企业等公共场所的内部有很多信息管理系 统 , 用户使用这些系统时需要进行身份认证。传统的认证机制是基于用户名和密码的,每一 个系统都建立有自己的用户信息数据库,用来验证用户的身份。对于一个要访问不同系 统的用户,每进入一个系统就要登录一次,这无疑会耗费大量的时间,同时用户也需要 记忆大量的账号信息。 单点登录系统就是为了解决这样问题而产生的,它统一管理各个应用系统用户的身 份验证,并能够将验证信息安全、高效地传递给各个系统。这样,用户只需要参与一次 身份认证过程,获得身份验证系统授权的身份标识。以后用户登录别的应用系统时,可 以用这个身份标识去通过单点身份验证系统的认证,从而使用户可以高效地访问各个系 统中的资源,提高工作效率。由于所有的用户的认证都归身份管理系统管理,所以它的 用户信息的存储控制就显得极为重要。 基于 LDAP 的目录服务,能够为网络身份管理系统提供高可靠的数据存储和高性能 的数据查询能力,同时它是跨平台的标准协议,应用程序不用为 LDAP 目录放在什么样 的服务器上操心。所以目前,有大量的应用系统都开始采用 LDAP 目录服务器作为用户 身份信息认证管理的服务器。 本文给出了 J2EE 平台下,基于 LDAP 目录服务的单点登录在校园身份管理系统中 的实现方案。 关键词:关键词:关键词: 关键词: LDAPLDAPLDAP LDAP ;轻量级目录访问协议;;轻量级目录访问协议;;轻量级目录访问协议; ;轻量级目录访问协议; WebWebWeb Web SSOSSOSSO SSO ;单点登录;单点登录;单点登录 ;单点登录 ;;; ; 身份认证系统身份认证系统身份认证系统 身份认证系统 基于 LDAP 的单点登录方案的设计与实现 -II- TheTheThe The designdesigndesign design andandand and implementationimplementationimplementation implementation ofofof of SSOSSOSSO SSO schemeschemescheme scheme basedbasedbased based ononon on LDAPLDAPLDAP LDAP Abstract With the develpment of information, many schools and corporations have developed kinds of information management systems. Users need to authenticate identity when they use these systems. The traditional authentication mechanism is based on the user name and password, and every system has established a user information database, to authenticate the identity of the user.When an user wants to access different systems, he must input different account information to enter corresponding systems. This mechanism wastes user's time and make user remember a large number of account information. Single Sign On is introduced to resolve this problem. It unifiedly manages every user's identity authentication of various applications, and authentication information can be safely and efficiently transfered to the various systems. In this way, users only need to participate in one authentication process, and get the identifier of authentication system. After users log in other applications, they can use this identifier to adopt the authentication of identity management system, so that users can efficiently access the various systems and enhance efficiency. Because identity management system manages all the user's identity authentication, its control on the storage of user' information is extremely important. LDAP-based directory service, is able to provide highly reliable data storage and high- performance data search for identity management system on network. At the same time, it is a standard cross-platform protocols, applications do not have to know what kind of server is LDAP directory deployed. Therefore, at present, a large number of applications are beginning to use LDAP directory server as a user identity authentication management server. In my paper, I explain the implementation of the SSO scheme in the campus identity management system based on LDAP directory services, under the J2EE platform. KeyKeyKey Key WordsWordsWords Words :LDAPLDAPLDAP LDAP ;LightweightLightweightLightweight Lightweight DirectoryDirectoryDirectory Directory AccessAccessAccess Access ProtocolProtocolProtocol Protocol ;;; ; SingleSingleSingle Single SignSignSign Sign OnOnOn On ;;; ; WebWebWeb Web SSSSSS SS OOO O ;;; ; IdentityIdentityIdentity Identity AuthenticationAuthenticationAuthentication Authentication SystemSystemSystem System 基于 LDAP 的单点登录方案的设计与实现 - III - 目 录 摘 要.....................................................................................................................................I Abstract......................................................................................................................................II 1绪论..........................................................................................................................................1 1.1 项目背景......................................................................................................................1 1.2 单点登录系统介绍......................................................................................................1 1.3 本文的组织与结构......................................................................................................2 2单点登录模型研究..................................................................................................................4 2.1 身份管理的内容和发展...............................................................................................4 2.2 传统的用户登录模式..................................................................................................5 2.3 单点登录模式..............................................................................................................6 3 LDAP 目录访问协议.............................................................................................................. 8 3.1 目录访问协议..............................................................................................................8 3.1.1 目录服务概述...................................................................................................8 3.1.2 X.500 目录访问协议.........................................................................................8 3.1.3 LDAP 目录访问协议........................................................................................ 9 3.1.4 X.500 和LDAP 两种协议的比较.................................................................... 9 3.2 LDAP 工作原理......................................................................................................... 10 3.3 LDAP 模型................................................................................................................. 11 3.3.1 信息模型.........................................................................................................11 3.3.2 命名模型.........................................................................................................12 3.3.3 功能模型.........................................................................................................12 3.3.4 安全模型.........................................................................................................13 3.4 LDAP 目录与关系型数据库的对比......................................................................... 14 3.5 LDAP 在用户身份管理中作用................................................................................. 15 4系统设计................................................................................................................................16 4.1 系统环境....................................................................................................................16 4.1.1 前台系统.........................................................................................................16 4.1.2 后台系统.........................................................................................................16 4.2 系统基本功能要求....................................................................................................17 4.3 系统架构....................................................................................................................17 4.4 功能模块设计............................................................................................................18 基于 LDAP 的单点登录方案的设计与实现 -IV- 4.5 LDAP 目录树设计..................................................................................................... 19 5系统实现................................................................................................................................21 5.1 身份认证系统的实现.................................................................................................21 5.1.1 身份认证系统处理用户登录过程..................................................................21 5.1.2 代码实现.........................................................................................................21 5.2 Web 应用的实现........................................................................................................ 25 5.2.1 实现方案分析.................................................................................................25 5.2.2 代码实现.........................................................................................................26 5.3 LDAP 目录服务的实现............................................................................................. 27 6校园身份管理系统中的单点登录测试................................................................................29 结论...........................................................................................................................................32 参考文献...................................................................................................................................33 致谢...........................................................................................................................................34 基于 LDAP 的单点登录方案的设计与实现 –1– 1绪论 1.1 项目背景 随着信息技术和网络技术的广泛普及,政府、公司、学校等公共场所的内部出现了 各种各样的应用管理系统。这些管理系统中最重要的一类就是基于 B/S 结构的 Web 应 用系统,如电子邮件服务等。这些应用一般通过浏览器访问 Web 服务器,服务器以页 面表单的方式要求用户输入登录参数,用户输入并提交后,由 Web 服务器的脚本程序 进行身份验证。 近年来,Web 应用的使用进入成熟阶段,提供的信息和服务也越来越多。成功地管 理和保护 Web 应用的信息和资源已经成为一个越来越复杂的挑战。身份认证管理是保 护Web 信息和资源的核心部分。一般的身份认证方法是在每个应用系统中保存各自的 用户信息并建立独立的身份验证模块,使用独立的认证机制在各自的身份认证模块中认 证。这种传统的身份认证方法将用户的“网络身份”分割成许多独立的碎片,这些碎片 构成了繁多的一对一的客户服务关系,导致了更多的安全风险。同时如果用户要频繁访 问不同系统,每进入一个系统就要登录一次,这无疑会耗费大量的时间,并且用户需要 记忆大量的账号信息。 以学校为例,一个学校的内部有很多的信息系统,如学生信息管理系统、文件共享 服务器、成绩管理系统、图书馆信息系统等,每个用户在这些系统上都有账号,以前他 们需要在每个系统上配置为各个账号分配的权限,由于系统过多,很容易出现遗忘,出 现过用户被分配过高权限后没有及时修改的现象,发生了信息泄露的问题,影响了系统 的安全。同时每个用户都需要记住自己在各个系统上的用户名和密码,众多用户同时面 对多个系统要重复输入账号、口令等信息,不仅烦琐,更重要的是容易出现口令丢失, 给系统和用户造成损失。 因此,基于安全和效率的考虑,信息系统急需有一个统一的、具有较高安全控制的 身份验证和授权系统,以保证数据安全和用户操作方便。在本文中,我设计并实现了一 个基于 LDAP 的单点登录系统,它能够很好地解决用户身份验证和授权的问题。 1.2 单点登录系统介绍 单点登录系统(Single Sign-On,SSO),是指当用户访问多个需要认证的系统应用时, 只需要初始进行一次登录和身份认证,就可以访问具有权限的任何系统,而不需要再次 登录,后续系统会自动获取用户信息,从而识别出用户的身份。这样,无论用户要访问 多少个应用,他只需要进行一次登录,而不需要用户重复输入认证信息。单点登录技术 基于 LDAP 的单点登录方案的设计与实现 –2– 可以简化用户访问多种系统应用,避免用户由于需要记忆众多账号信息而出现的遗忘, 而且可以减少口令等重要信息在网络传播时被截获的危险。 单点登录系统首先从根本上不再使用简单的基于用户名和密码的身份认证机制,而 是采用了结合用户电子身份标识的新的身份认证机制,这种新的身份认证机制可大大提 高系统的安全性。其次,单点登录系统把原来分散的用户管理集中了起来,各个系统之 间依靠相互授权的关系来进行用户身份的自动认证。用户的账号信息是集中保存和管理 的,管理员只需在统一的用户信息数据库中管理用户账号,不必在多个系统中分别设置 用户信息数据库,降低了信息的冗余度。总体来说,单点登录系统的优点主要有:提高 用户工作效率和带来好的用户体验;更理想的网络安全性;更有效的用户管理。 在单点登录系统中身份验证模块的用户信息是整个系统中用户信息保存的唯一地 方,如果身份验证模块的用户数据泄露或者丢失,将带来很大的安全隐患,所以用户信 息的存储就显得非常重要。 本系统中采用 LDAP 目录来保存用户信息。LDAP(Lightweight Directory Access Protocol)即为轻量级目录访问协议,它基于 X.500 标准,但是简单了很多,而且可以根 据需要定制。LDAP 目录中可以存储各种类型的数据,包括电子邮件地址、邮件路由信 息、联系人列表等。通过把 LDAP 目录作为系统集成中的一个重要环节,可以简化员工 在企业内部查询信息的步骤,甚至是主要的数据源都可以放在任何地方。LDAP 协议是跨 平台和标准的协议,因此应用程序就不用为 LDAP 目录放在什么样的服务器上操心了 本文设计了一个 J2EE[1]平台下,基于 LDAP 目录服务的校园身份管理系统,它使用 OpenLDAP[2]作为目录服务器,采用单点登录(Single Sign-On,SSO)的策略。 该系统有很好的用户权限控制粒度[3],可以整合学校的各种系统,如学生信息管理 系统、校园投票系统、成绩管理系统、图书馆信息系统和文件共享服务器等。这些系统 的各种认证信息统一存放于单一的身份认证服务器中,实现单点认证,全局应用。用户 在一点认证就可以根据权限访问整个学校的所有资源。比如用户在登录学生信息管理服 务器时进行了认证,身份验证系统就给该用户一个网络身份标识,整个系统就知道了该 用户的身份,该用户在使用系统服务时就不需要再认证了。 1.3 本文的组织与结构 本文分几个部分介绍了单点登录(SSO)在基于 LDAP 目录服务的校园身份管理系统 中的实现。 第一章 绪论:介绍了项目背景和系统所解决的问题; 第二章 单点登录模型研究:介绍了身份管理技术和几种验证模型,并着重对单点 基于 LDAP 的单点登录方案的设计与实现 –3– 登录模型进行了分析研究; 第三章 LDAP 目录访问协议:分析介绍了目录协议技术和 LDAP 在身份管理中的 作用; 第四章 系统设计:展示了本系统的结构设计、模块设计和目录树的设计; 第五章 系统实现:以上一章为基础,给出了基于 LDAP 的单点登录系统的具体实 现; 第六章 管理系统中的单点登录的测试:给出系统的功能测试,证明基本达到系统 功能要求。 基于 LDAP 的单点登录方案的设计与实现 –4– 2 单点登录模型研究 2.1 身份管理的内容和发展 身份管理[4](Identity Management,IDM)是2001 年以后,为实现大规模异构网络管 理而提出的一种网络安全新技术,其目标是通过标识一个系统中的个体并将用户权限和 相关约束条件与身份标识相关联,进而控制成员对于系统资源的访问。身份管理的目标 是在提高效率和安全性的同时,降低原有的管理用户及用户的身份、属性和信任证书产 生的相关成本,保护用户的隐私,方便信息共享,提高组织运营的灵活性。 身份户管理涉及用户身份的整个生命周期,主要包括用户账号的创建、维护和撤销 三个部分:账号创建包括给用户建立账号并分配适当的级别权限以访问完成工作所需的 资源;帐户维护包括保持用户身份的更新,以及依据工作完成的需要适当调整用户可访 问资源的级别权限,以及用户在更改自身身份信息时在不同系统之间进行修改的同步; 帐户撤销包括在用户离开组织或公司之后,使用户帐户及时失效以实现对用户既得资源 访问权限的回收。 身份管理系统近些年发展很快,现在呈迅速扩大的趋势。身份认证技术已经逐渐由 传统的多点登录向集中式单点登录方向发展,同时身份也不只局限在一个公司内部,公 司之间联合身份认证已很热门。联合身份认证解决如何在公司之间实现单点认证,涉及 到多个身份管理服务器互相交互,建立信任管理的问题。 身份管理的发展趋势如图 2.1所示。 图2.1 身份管理的发展 图2.1 说明了身份管理,从传统的多点登录模式到集中单点登录模式再到联合身份 认证模式的发展历史。 基于 LDAP 的单点登录方案的设计与实现 –5– 本文只探讨到集中式的单点登录方式,联合身份认证方式不做研究。 2.2 传统的用户登录模式 传统的认证机制[5]是基于用户名和密码的,每一个系统都建立有自己的用户信息数 据库,用以验证用户的身份。用户要访问 N个系统就需要在 N个系统中建立 N个帐号。 当其要访问一个系统中的资源时,用户首先要登录进入该系统,如果他同时要访问处于 多个系统中的资源,用户就不得不按照各个系统的要求分别登录进入相应的系统。 近年来,为了实现企业的信息化、电子商务和其他需求,出现了越来越多的网络应 用系统,在这种传统的用户登录模式下,这些企业的网络用户和系统管理员不得不面对 这些现实: (1)用户需要使用其中的任何一个应用的时候都需要做一次身份认证,而且每一次认 证使用的认证信息(用户名和密码)不能保证一致; (2)系统管理员需要对每一个系统设置一种单独的安全策略,而且需要为每个系统中 的用户单独授权以保证他们不能访问没有被授权访问的网络资源。 传统的用户登录过程的概念结构如图 2.2所示。 图2.2 传统的用户登录过程 图2.2 说明了传统的用户登录模式的登录过程的原理:网络用户登录不同的应用系 统时,需要输入不同的用户信息,不同的应用系统用不同的认证策略对用户进行认证。 基于 LDAP 的单点登录方案的设计与实现 –6– 2.3 单点登录模式 单点登录[14],就是用户只需要在网络中主动地进行一次身份认证,然后就可以访问 其被授权使用的所有处在网络上的资源而不需要再参与其它应用的身份认证过程。这些 服务资源可能处在不同的计算机环境中,用户以后的身份认证是系统自动完成的。 首先,单点登录系统从根本上不再使用基于用户名和密码的身份认证机制,而是采 用了结合用户电子身份标识的新的身份认证机制,这种新的身份认证机制可大大提高系 统的安全性。 其次,单点登录系统把原来分散的用户管理,集中起来了。各个系统之间依靠相互 授权的方式来进行用户身份的自动认证。用户的账号信息是集中保存和管理的,管理员 只需要在统一的用户信息库中添加、删除用户账号,不必在多个系统中分别设置用户信 息数据库。由此可见单点登录系统的优点有: (1)提高用户的工作效率和带来良好的用户体验。用户不再需要每访问一个 Y应用资 源就进行一次身份认证过程,从而使用户有更多的时间从事有益的工作,同时也可以把 用户从繁杂的帐户信息记忆中解脱出来。 (2)更好的网络安全性。系统中使用的身份认证机制使用了加密等多种方法,可以防 止大部分的网络攻击。同时由于新的身份认证机制使用户的账号信息记忆量减少,使系 统由于用户机密信息的泄露而导致安全事故出现的机会大大减少。 (3)更有效的用户管理。用户的账号数据统一保存,网络管理员只需要在一个用户信 息库中对用户的账号信息进行操作,减少了管理员的工作量。 单点登录过程的概念结构如图2.3所示。 图2.3 单点登录过程 基于 LDAP 的单点登录方案的设计与实现 –7– 图2.3 说明了单点登录系统模式下用户登录过程的原理:网络用户访问不同的应用 系统时,只需在统一认证入口(即单点登录中的单点)登录,取得身份认证系统的身份标 识,从而达到了单点登录,多点应用的目的。 目前 SSO 的模型[6]主要有三种:基于经纪人(Broker)的SSO 方案,基于代理(Agent)的 SSO 方案,基于网关(Gateway)的SSO 方案。 (1)基于经纪人的单点登录方案(Broker-Based SSO) 在Broker-Based SSO方案中,有一个完成集中认证、用户账号管理的服务器和一个 公共、统一的用户数据库。Broker 为用户提供一个能够被用户进一步访问请求的电子身 份凭证。Broker-basedSSO 方案的主要优点是有一个中央用户数据库,易于对用户数据 进行管理。主要缺点是需要修改原有应用。 (2)基于代理的单点登录方案(Agent-Based SSO) 在Agent-Based SSO方案中,有一个代理程序,自动为不同的应用程序认证用户。 代理程序可以用不同的方式实现。若 Agent 部署在客户端,它能装载获得用户名口令列 表,自动替用户完成登录过程,减轻客户端程序的认证负担。Agent 部署在服务器端, 它就是服务器的认证系统和客户端认证方法之间的“翻译”。当软件供应商提供了大量 的与原有应用程序通信的 Agent 时,Agent-Based SSO方案可使应用迁移变得十分容易。 (3)基于网关的单点登录方案(Gateway-Based SSO) 在基于 Gateway-Based SSO方案中,用户对受限网络服务的访问都必须通过网关。 网关可以是防火墙,或者是专门用于通信加密的服务器。所有需要保护的网络服务器都 放在被网关隔离的受信网段里。客户通过网关认证后获得访问服务的授权。如果在网关 后的服务能够通过 IP地址进行识别,就可以在网关上建立一个基于 IP的规则表。将规 则表与网关上的用户数据库相结合,网关就可以被用于单点登录。由于网关可以监视并 改变传给应用服务的数据流,所以它能够改变认证信息以适应适当的访问控制,而不用 修改应用服务器。网关作为一个分离的部件,安装和设置方便;但是如果存在多个安全 网关,那么用户数据库并不能自动地被同步。Gateway-Based SSO方案不适用于用户端 使用代理的情况。 本文设计并实现的基于 LDAP 目录服务的校园身份管理系统,采用的是较为简单的 Broker-Based SSO方案。 基于 LDAP 的单点登录方案的设计与实现 –8– 3 LDAP 目录访问协议 3.1 目录访问协议 3.1.1 目录服务概述 目录是一种专门被优化用于执行读、浏览、搜索等操作的数据库,可以包含网络以 及在网络上运行的应用程序所需的信息。它倾向于包含具有描述性的、基于属性的信息 , 并且支持高度复杂的过滤搜索功能。目录通常不支持复杂的关系操作和事务机制,而关 系型数据库管理系统则常用于处理复杂的更新操作。目录被优化成以对大量的查找和搜 索操作做出快速响应,并且目录可以复制信息以增加可用性和可靠性,这样也减少了响 应时间。 目录服务[7]提供对目录信息访问。有多种不同的方式实现目录服务,不同的方式允 许目录存储不同种类的信息,对目录信息的引用、查询、更新也有不同的要求。其中全 局目录通常是分布式的,目录信息存储在网络上的多台主机上,多台主机联合提供目录 服务。 3.1.2 X.500 目录访问协议 X.500 协议系列是世界通用的分布式目录服务标准,由 ITU-T与ISO/IEC 于1988 年合作制定,并成为 ISO 标准 9454。X.500 在一个层次式命名空间中组织目录对象,并 支持大量的信息存储。X.500 定义了强大的搜索功能,使存取目录信息变得更加容易。 X.500 具有可伸缩性,可以借助于附加的模块实现与其它目录的互操作性。X.500 定义 了综合目录服务,包括信息模型、名字空间、功能模型、访问控制、目录复制以及目录 协议。 X.500标准是建立在 ISO 协议基础上的一个应用协议。它以目录树的形式存放和管 理信息,每棵目录树对应一个单位或组织,由一个目录系统代理 DSA(Directory System Agent)管理。各个独立的 DSA之间通过目录系统协议 DSP(Directory System Protocol) 相互传递信息,形成分布式系统和区域自治,实现信息的共享。用户通过目录用户代理 DUA(Directory User Agent)通过DAP(Directory Access Protocol)访问DSA,查询和 维护信息。 由于 X.500 是一个分布式目录服务,因此具有巨大的潜在命名空间、本地数据的本 地管理能力、高级的搜索功能、一直并且可以局部扩展的命名空间、提供简单认证和强 认证安全性、访问控制列表和复制支持。但是,X.500 虽然是一个完整的目录服务协议, 基于 LDAP 的单点登录方案的设计与实现 –9– 但在实际应用的过程中,却也存在着不少障碍,主要表现在: (1)严格遵照 ISO 七层协议模型,对相关层协议环境要求过多; (2)主要是在 UNIX 上运行,很多小系统上无法使用。 因而随着 TCP/IP 协议的普及,这一系列协议越来越不适应实际的需要了。 3.1.3 LDAP 目录访问协议 LDAP(Lightweight Directory Access Protocol)即为轻量级目录访问协议,它基于 X.500 标准,但是简单了很多,而且可以根据需要定制。与X.500 不 同 ,LDAP 支持 TCP/IP, 这对访问 Internet 是必须的。LDAP 的核心规范在 RFC 中都有定义。在企业范围内实现 LDAP,可以让运行在几乎所有计算机平台上的所有应用程序从 LDAP 目录中获取信息。 LDAP 目录中可以存储各种类型的数据,包括电子邮件地址、邮件路由信息、联系人列表 等。通过把 LDAP 目录作为系统集成中的一个重要环节,可以简化员工在企业内部查询 信息的步骤,甚至是主要的数据源都可以放在任何地方。 LDAP 协议是跨平台和标准的协议,因此应用程序就不用为 LDAP 目录放在什么样的 服务器上操心了。实际上,LDAP 得到了业界的广泛认可,就是因为它是 Internet 的标 准。生产商都很愿意在产品中加入对 LDAP 的支持,因为他们根本不用考虑另一端(客户 端或服务端)是怎么样的。LDAP 服务器可以是任何一个开发源代码或商用的 LDAP 目录服 务器(或者还可能是具有 LDAP 界面的关系型数据库),因为可以用同样的协议、客户端 连接软件包和查询命令与 LDAP 服务器进行交互。 3.1.4 X.500 和LDAP 两种协议的比较 从目录服务技术的发展来看,LDAP 标准实际上是在 X.500 标准基础上产生的一个简 化版本[8],两者之间的关系与那种为解决同一个问题而出现的两个独立发展的技术有很 大的不同之处。 (1)作为 IETF(Internet Engineering Task Force)一个正式的标准,LDAP 是X.500 标 准中的目录访问协议 LDAP 的一个子集,可用于建立 X.500 目录。因此这两个目录服务 技术标准有着许多的共同之处,即在平台上,都实现了一个通用的平台结构,提供了一 个操作系统和应用程序需要的信息服务类型,可以被许多平台和应用程序接收和实现; 在信息模型上,都使用了条目、对象类、属性等概念和模式来描述信息;在命名空间方 面,都使用了目录信息树结构和层次命名模型:在功能模型上,都使用了相似的操作命 令来管理目录信息;在认证框架方面,都可以实现用户名称和密码,或者基于安全加密 方式的认证机制;在灵活性上,它们的目录规模都可大可小,大到全球目录树,小到只 有一台目录服务器;在分布性方面,目录信息都可以分布在多个目录服务器中,这些服 基于 LDAP 的单点登录方案的设计与实现 –10– 务器可以由各组织管理,既保证了目录信息总体结构一致性,又满足了分级管理的需要。 (2)LDAP 与X.500 的DAP 相同之处是 LDAP 也是被设计用来从分层目录中提取信息。 但与之不同的是,为保持网络的带宽,LDAP 对来自 X.500 目录询问的应答次数加以限 制。最初 LDAP 只是一种访问 X.500 目录的简单方法,是 X.500 的功能子集,但随着它 的成熟和独立发展,已经增加了许多在 X.500 中没有的新特性。现在的 LDAP 既可以为 X.500 目录服务提供一个轻型前端,也可以实现一个独立的目录服务。 (3)LDAP 的独特之处 在LDAP 中AP(Access Protocol)既是一个 X.500 的访问协议,又是一个灵活的,可 以独立实现的目录系统。 在LDAP 中,DAP 基于 Internet 协议,X.500 基于 OSI(开放式系统互联)协议:建立在 应用层上的 X.500 目录访问协议 DAP,需要在 OSI 会话层和表示层上进行许多的建立连接 和包处理的任务,需要特殊的网络软件实现对网络的访问;LDAP 则直接运行在更简单和 更通用的 TCP/IP 或其它可靠的传输协议层上,避免了在 OSI 会话和表示层的开销,使 连接的建立和包的处理更简单、更快,对于互联网和企业网应用更理想。 LDAP 协议更为简单:LDAP 继承了 X.500 最好的特性,同时去掉了它的复杂性,LDAP 通过使用查找操作实现列表操作和读操作;另一方面省去了 X.500 中深奥的和很少使用 的服务控制和安全特性,只保留了常用的特性,简化了 LDAP 的实现。 LDAP通过引用机制实现分布式访问:X.500中DSA通过服务器之间的链操作实现分布 式访问,这样就使查询的压力集中在了服务器端;而LDAP 通过客户端 API 实现分布式操 作,平衡了负载。 LDAP 具有低费用、易配置和易管理的特点:经过性能测试,LDAP 比X.500 具有更少 的响应时间;LDAP 提供了满足应用程序对目录服务所需求的特性。 3.2 LDAP 工作原理 LDAP 是以服务器客户端方式工作的,目录服务将数据库软件的逻辑结构分为前端 (客户端)和后端(服务端和仓库)[9]。 LDAP 的逻辑结构如图 3.1 所示。 图3.1 LDAP 的逻辑结构 基于 LDAP 的单点登录方案的设计与实现 –11– 图3.1 说明了 LDAP 的三层逻辑结构:客户端负责和用户进行交流,服务器端负责 接受和解释客户的请求,仓库则是真正存储信息的地方。 客户端是直接面对一般开发者和用户的;服务端是用于接收和解释客户请求,然后 以客户的身份完成请求,并将完成结果返回给用户;仓库则是真正存储信息的地方。在 LDAP 中,服务端和仓库之间的连接采用了 ODBC 机制,所以可以使用任何支持和具有 ODBC 驱动程序的数据库软件,简单的可以是 Linux 系统中自带的 GDBM 或Alpha 中 的NDBM 等数据库管理系统;也可以选用在功 能和性能上更优越的 Oracle 和Sybase 等 系统,这样,可以提高系统的可移植性。 现在己经有了许多基于 LDAP 协议开发出的资源管理系统和工具,如 Openldap, NDS(Novell Directory Service)和ADS(Active Directory Service),OracleOID 等。它们已 经逐渐的被使用在了各个需要目录服务的领域,并且应用的趋势在增强。 3.3 LDAP 模型 LDAP 有四种模型[10-11]:信息模型、命名模型、功能模型、安全模型,用以描述 LDAP 的工作机制,描述什么样的数据可以存于 LDAP 目录中,以及如何操作这些数据。 3.3.1 信息模型 LDAP 信息模型描述 LDAP 的信息表示方式,定义了能够在目录中存储的数据。它 以模式(Schema)[12]为基础,以条目(Entry)为核心。模式由若干条目组成,条目即为关于 对象的属性[13]信息集合。每个属性储存有属性值,说明对象的一个特征,每个属性有一 个类型,不同的类型有不同的取值范围,每个类型可以对应一个值,也可以对应多个值。 LDAP 中的信息模型,类似于面向对象的概念,在 LDAP 中每个条目必须属于某个 后多个对象类型(ObjectClass),每个 ObjectClass 由多个属性类型构成,每个属性类型有 所对应的语法规则和匹配规则;对象类和属性类型的定义均可以使用继承的概念。每个 条目创建时,必须定义所属的对象类,必须提供对象类中必选类型的属性值,在 LDAP 中把对这些对象类、属性类型、语法和匹配规则统称为 Schema。 Schema 元素分系统定义和用户定义两类。一般用户只能定义属性类型和对象类型。 (1)属性类型(Attribute Types) 属性类型控制属性格式,包括属性的语法、匹配规则、是否可以多值、修改权限和 用法等。属性类型可以直接由 0或多个属性类型继承而来,形成属性类型的层次关系树 。 (2)对象类(Object Class) 对象类是“共享某些特性的对象的识别家族”,即对象的模板。通过定义条目中所 含的属性来定义目录中的条目类型。 基于 LDAP 的单点登录方案的设计与实现 –12– 3.3.2 命名模型 LDAP 中的命名模型,也即 LDAP 中的条目定位方式。在 LDAP 中每个条目均有自 己的 DN 和RDN。DN 是该条目在整个树中的唯一名称标识,RDN 是条目在父节点下 的唯一名称标识。如同文件系统中,带路径的文件名就是 DN,文件名就是 RDN。 命名模型以倒树的形式排列,目录树命名模型如图 3.2 所示。 图3.3 目录树命名模型 图3.3 说明了目录树命名模型的结构,该图表述了组织 ou=Student,o=SSDUT, st=LiaoNing,c=China 下的一个用户 cn=guoshuyang。 可以看到,LDAP 的模型与 Unix 系统中目录结构类似,其不同之处在于: (1)在LDAP 目录中,DN 中各元素的排序是从叶到根;而在Unix 文件系统中,文 件绝对路径名中各元素的排序是从根到叶; (2)在LDAP 目录中,DN 中各元素之间的分隔符是“,”;而在Unix 文件系统中, 文件绝对路径名中各元素之间的分隔符是 “/”; (3)在LDAP 目录中,允许超越树形结构的别名项目(Alias Entry),它指向其它项目。 3.3.3 功能模型 在LDAP 中功能模型共有三类: (1)询问(Interrogation) LDAP 在信息询问方面主要定义了查找(Search)和比较(Compare)两个操作。在查找 基于 LDAP 的单点登录方案的设计与实现 –13– 操作中,根据选取标准在指定范围内选择项目,这个选取标准通常称作查找过滤器 (Searchfilter),并且可以规定一组需要返回的属性。另外,还可以规定查找结果的大小 和客户端等待结果的时间。比较操作主要是判断指定项目是否包含指定属性(包括类型 和值)。 (2)更新 (Update) LDAP 在信息更新方面定义了新增(Add),删除(Delete)、修改(Modify)和修改 RDN(Modify RDN)等四个操作。新增操作主要是在 LDAP 目录中插入一个新的项目;删 除操作主要是从 LDAP 目录中删除已有项目;修改操作主要是修改已有项目的属性,具 体地说,可以增加、删除、修改属性或属性值;修改 RDN 操作主要是修改项目的名字。 (3)身份验证(Authentication) LDAP 在身份验证方面定义了连接(Bind)、断接(Unbind)和作废(Abandon)等三个操 作。连接操作主要是客户端向服务器提供身份信息,包括 DN 和口令,以便于服务器验 证客户端的身份,身份验证成功即建立客户端与服务器之间的会话(session)。断接操作 主要是结束客户端与服务器的会话。作废操作主要是中止正在执行的操作。 3.3.4 安全模型 LDAP 中的安全模型主要通过身份认证、通讯安全和访问控制来实现。 身份认证:在LDAP 中提供三种认证机制,即匿名、基本认证和 SASL(Simple Authenticationand Secure Layer)认证。匿名认证即不对用户进行认证,该方法仅对完全公 开的方式适用;基本认证均是通过用户名和密码进行身份识别,又分为简单密码和摘要密 码认证;SASL 认证即 LDAP 提供的在 SSL和TLS 安全通道基础上进行的身份认证, 包括数字证书的认证。 通讯安全:在LDAP 中提供了基于 SSL/TLS 的通讯安全保障。SSL/TLS 是基于 PKI 信息安全技术,是目前 Internet 上广泛采用的安全服务。LDAP 通过 StartTLS 方式启动 TLS 服务,可以提供通讯中的数据保密性、完整性保护;通过强制客户端证书认证的 TLS 服务,同时可以实现对客户端身份和服务器端身的双向验证。 访问控制:虽然 LDAP 目前并无访问控制的标准,但从一些 LDAP 产品的访问控制 情况,我们不难看出:LDAP 的访问控制异常灵活和丰富,在 LDAP 中是基于访问控制 策略语句来实现访问控制的,这不同于现有的关系型数据库系统和应用系统,它是通过 基于访问控制列表来实现的,无论是基于组模式或角色模式,都摆脱不了这种限制。 在使用关系型数据库系统开发应用时,往往是通过几个固定的数据库用户名访问数 据库。对于应用系统本身的访问控制,通常是需要建立专门的用户表,在应用系统内开 基于 LDAP 的单点登录方案的设计与实现 –14– 发针对不同用户的访问控制授权代码,这样一旦访问控制策略变更时,往往需要代码进 行变更。总而言之,关系型数据库的应用中,用户数据管理和数据库访问标识是分离的 , 复杂的数据访问控制需要通过应用来实现。 而对于 LDAP,用户数据管理和访问标识是一体的,应用不需要关心访问控制的实 现。这是由于在 LDAP 中的访问控制语句是基于策略语句来实现的,无论是访问控制的 数据对象,还是访问控制的主体对象,均是与这些对象在树中的位置和对象本身的数据 特征相关。 在LDAP 中,可以把整个目录、目录的子树、制定条目、特定条目属性集或符合某 过滤条件的条目作为控制对象进行授权;可以把特定用户、属于特定组或所有目录用户 作为授权主体进行授权;最后,还可以定义对特定位置(例如 IP 地址或 DNS 名称)的访 问权。 3.4 LDAP 目录与关系型数据库的对比 LDAP 作为存储介质,同关系型数据库一样,都可以存储各种类型的数据,包括邮 件地址,联系人列表等。作为一门新兴的正在迅猛发展的技术,与关系型数据库不同之 处在于: (1)存储内容:目录服务器的重要功能是提供快速的查询。其中的数据更新很少,存 储的多是更新频率很低的数据,更新的过程往往是成批的增加或删除,并且各数据项之 间的关联不是很密切。而关系型数据库存储的多是一些需要随时更新的数据,各个数据 的关系比较复杂,往往一个数据的更新带来一系列数据的更新操作。用户的口令等信息 数据静态的数据,更新的频率不高,并且往往是成批的增加和删除用户,所以更适合用 目录服务器存储。 (2)存储模式:目录服务独特的对象存储模式和树状结构使其具有良好的扩展性。在 LDAP 中,信息是以条目为单位存储,每个条目包括一个或多个属性,每个属性由一个 或多个值,这种结构很适合于用户基本信息的存储。 (3)存储方式:目录服务支持数据的分块和冗余存储,不同的服务器之间以指针相连 , 这一点使得目录服务能更好的适应分布式环境。 (4)访问方式:目录服务不像关系型数据库那样支持复杂的 SQL 查询和更新,但是, LDAP 中提供了很多访问目录服务的 API 函数,可以利用它们开发各种基于 LDAP 的应 用。 无论对信息提供者、管理者或是访问者,以 LDAP 为代表的目录服务因其简单、高 效、低成本,都是一个很好的解决方案。随着网格热潮的兴起,目录服务渐渐成为研究 基于 LDAP 的单点登录方案的设计与实现 –15– 热点,其重要性正逐渐为大家所认同,因而目录服务也被视为网络应用发展的下一个核 心技术闭。 3.5 LDAP 在用户身份管理中作用 每个机构都需要使用一种机制来记录其实体(如员工、员工所在的部门)和资产(如建 筑物、会议室和设备等)。这种机制通常以目录的形式出现,提供机构内所有成员的联 系信息。在商业社会普及计算机之前,这些目录通常只是一些私人电话薄,并且通常是 按照字母瞬息排列的员工名单和他们的联系信息,但这也反映了机构的组织结构的一个 侧面。如果组织组都大,那么其目录可能包括部门列表、大楼以及会议室的电话号码部 分。通常,这种目录的发布由某个人或某个小组负责,组织越大,这项任务就越艰巨。 随着传呼机、移动电话和电子邮件等电子商务工具的普及,要维护这样的目录越来 越困难。现在员工拥有不止一个电话号码,即他们有多条联系信息。这种状况就要求使 用电子目录,以便存储各种联系信息,其结构要相当灵活。 在LDAP 目录服务中,有两个重要的特点: (1)目录是对象的层次结构,对象可以代表员工、资产或其他任何实体。 (2)目录的树状层次结构中,机构的各个部门只负责维护目录结构中属于自己的那部 分,即可确保每个对象都有父对象负责创建和维护该对象。这一特征于身份认证非常重 要,因为公钥可能是与员工有关的信息之一。 在非对称加密算法中,要核实公钥的真实性和验证持有者的身份,其中一种方法是 以数字证书的方式提供公钥,即有可信的第三方验证公钥持有者的身份,并将公钥和数 字证书进行绑定。这是通过对包含持有者的身份和公钥的文档进行数字签名而实现的, 但还需要解决的问题是如何发布证书,即让公众获得证书。 LDAP 的灵活性使其不仅可以存储数字证书及员工的其他信息,还可以用于发布组 织中全部成员的数字证书链。 基于 LDAP 的单点登录方案的设计与实现 –16– 4. 系统设计 4.1 系统环境 4.1.1 前台系统 (1)开发环境 硬件环境:普通 PC机(奔腾 2.4G Hz CPU,512M DDRII内存,256M 显存,17 寸 液晶显示器,80G 硬盘) 软件环境:Windows XP Prefessional SP2,Mozilla Firefox 2.0.0.13 (2)运行环境 硬件环境:普通 PC机(CPU 主频 1.6GHz 以上、内存容量 256M 以上) 软件环境:Windows 系列操作系统,IE5.0或Mozilla Firefox 1.5 以上 4.1.2 后台系统 (1)开发环境 硬件环境:普通 PC机(奔腾 2.4G Hz CPU,512M DDRII内存,256M 显存,17 寸 液晶显示器,80G 硬盘) 软件环境:操作系统:Windows XP Prefessional SP2 Internet 浏览器:Mozilla Firefox 2.0.0.13 开发语言:Java(JSP,Servlet,JavaBean),HTML,SQL 集成开发环境(IDE):Myeclipse 6.0 编译器:JDK1.6.0_04 Web 服务器:Tomcat-6.0.16 数据库:MySql LDAP 目录服务器:Openldap (2)运行环境: 硬件环境:普通 PC机(CPU 主频 1.6GHz 以上、内存容量 256M 以上) 软件环境:操作系统:Windows 系列操作系统 Web 服务器:Tomcat-6.0.16 数据库:MySql LDAP 目录服务器:Openldap 基于 LDAP 的单点登录方案的设计与实现 –17– 4.2 系统基本功能要求 (1)实现网络的身份管理,为网络用户提供唯一的账号; (2)统一的登录门户,不同的用户界面,不同的应用服务; (3)实现一次登录,访问不同的应用服务; (4)利用统一的平台和接口规范,将各种信息资源与相关系统集成起来。 4.3 系统架构 为了方便用户使用,系统采用 B/S(客户机/服务器)模式[15]。系统主要包括客户端和 服务器端两大模块。客户端用来实现统一认证系统的用户登录和各个应用系统用户界 面。服务器端是我们设计开发的主体,可以分为二部分:系统管理部分和认证系统。 系统架构如图 4.1 所示。 图4.1系统架构图 图4.1 描述了本系统的架构:本系统采用 B/S 架构。客户端实现统一认证系统的用 户登录和各个应用系统用户界面。服务器端分为四个模块,Web 应用模块是包含系统的 事务处理逻辑,认证系统负责认证用户输入的信息信息是否合法,管理系统负责不同模 块之间的通信和请求的派发的管理,存储系统则存储用户的信息,本系统中采用 LDAP 目录存储。 基于 LDAP 的单点登录方案的设计与实现 –18– 系统管理部分:包括图中的管理系统和存储系统,实现用户信息、应用系统信息的 管理、以及角色权限的分配。开发平台数据的存储主要采用 MyEclipse 6.0。数据的存储 使用关系型数据库和Openldap 目录。使用 Openldap 目录存储部门信息,管理员用户信 息等改动不频繁的信息,它的树形存储方式也有利于快速的检索,而用关系型数据库储 存各应用系统的实际应用数据。 认证系统:由所有的 Web 应用共享,其主要功能是将用户的登录信息和用户信息 库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标识 (Ticket),返还给用户。另外,认证系统还应该对 ticket 进行效验,判断其有效性。 4.4 功能模块设计 基于 LDAP 目录服务的校园身份管理系统的功能模块结构如图 4.2 所示。 图4.2 系统功能模块结构图 图4.2 说明了系统的模块结构,并给出了三个子系统之间的通信机制。 该校园身份管理系统包括 3个子系统: 基于 LDAP 的单点登录方案的设计与实现 –19– (1)身份管理子系统:具有身份认证功能。 (2)校园投票子系统:配合实现单点登录的子系统 校园投票子系统有系统管理员,实现对投票项目的增、删、查、改的维护工作;普 通用户可以匿名投票,无需登录认证。 (3)校园学生信息管理系统:配合实现单点登录的子系统 校园学生信息管理系统有系统管理员,实现对学生信息的增、删、查、改的维护工 作。 从系统功能模块结构图可得,系统的单点登录的机制:当用户第一次访问应用系统 (校园投票子系统或校园学生信息管理子系统)的时候,因为还没有登录,会被引导到认 证系统中进行登录;根据用户提供的登录信息,认证系统进行身份效验,如果通过效验 , 应该返回给用户一个认证的凭据ticket;用户再访问别的应用系统2的时候,就会将这个 ticket带上,作为自己认证的凭据,应用系统接受到请求之后会把ticket送到认证系统进 行效验,检查ticket的合法性。如果通过效验,用户就可以在不用再次登录的情况下访 问应用系统2了。 4.5 LDAP 目录树设计 目录树设计是 LDAP 中最重要的方面。在LDAP 目录中的数据是按属性结构来存储 的,叫做目录信息树(DIT)。DIT 中的“叶子”叫做入口,一个入口由一个可区分的名字 (DN)和任何树的属性/值对组成,而且一个属性可以对应多个值。 本系统的目录树总体结构如图 4.3 所示。 图4.3 目录树总体结构 基于 LDAP 的单点登录方案的设计与实现 –20– 图4.3 给出了本系统的目录树的总体结构,目录组织 ou=academicAdmin,dc=ssdut, dc=edu 下有两个用户节点 uid=kathy ,ou=academicAdmin ,dc=ssdut ,dc=edu 和 uid=guoshuyang,ou=academicAdmin,dc=ssdut,dc=edu。 基于 LDAP 的单点登录方案的设计与实现 –21– 5. 系统实现 5.1 身份认证系统的实现 5.1.1 身份认证系统处理用户登录过程 (1)首次登录的处理过程 ① 用户要访问一种受保护的资源时,首先发出访问请求,SSO的代理 filter 截取 用户请求,并且查看用户 Cookie(用户登录系统的 ticket)是否存在。 ② 若Cookie 不存在,SSO代理保存用户的访问请求,将用户请求重定向到 SSOAuth(SSO 身份认证系统),同时将用户访问请求(如访问的 URL,以下简称 goto,即 在认证请求完成之后用户要返回的访问请求)作为一属性传给 SSOAuth。 ③ SSOAuth 收到重定向请求,保存从 SSO代理传递过来的 goto,发送登录入口 给用户,让用户输入凭证信息。 ④ 用户根据登录入口信息输入个人信息,提交。 ⑤ SSOAuth 访问用户信息库(LDAP 目录信息),对用户提供的凭证信息进行验证。 ⑥ 凭证库返回验证结果。 ⑦ SSOAuth 将产生一个具有唯一标识(标识用 CookielD 表示)的SSO Cookie 对象, 并持久性存储该 cookie 对象,然后将用户请求转向 goto。同时将产生得 SSOCookie 对 象传递给 SSO代理 filter。 ⑧ 用户携带 SSOCookie 将请求转向 goto,继续访问。 (2)再次登录的处理过程 ① 用户发出携带有 SSOCookie 中的登录系统的 ticket 的请求,请求访问另一种应 用服务资源。 ② SSO代理 filter 截取并检查用户请求,发现SSOCookie 存在,然后从 SSOCookie 中获取用户的 ticket,判断是否有访问的权限,如果有,则将用户的访问请求重定向到 要访问的 web 资源,意味着用户访问成功。如果没有,则拒绝访问。 5.1.2 代码实现 身份验证模块中,SSOAuth 是主类,它包含验证用户信息和用户注销服务所需的各 种方法接口。 SSOAuth 的UML 类图如图 5.1 所示。 基于 LDAP 的单点登录方案的设计与实现 –22– 图5.1 SSOAuth 的UML 类图 图5.1 为类 SSOAuth 的UML 类图,显示了类 SSOAuth 所具有的属性和实现的方法 接口。 从UML 类图很容易看出,SSOAuth 就是一个简单的 Servlet。其中有两个静态成员 变量:accounts 和SSOIDs,这两个成员变量都是线程安全的 MAP 类: ConcurrentMap。 Accounts 用来存放从 LDAP 目录中获得的用户的用户名和密码。SSOIDs 保存了在用户 成功的登录后所产生的 cookie 和用户名的对应关系,它的功能是:当用户成功登录以后 , 再次访问别的系统,为了鉴别这个用户请求所带的 cookie 的有效性,需要到 SSOIDs 中 检查这样的映射关系是否存在。 主要的请求处理方法 processRequest()的流程图如图 5.2 所示。 基于 LDAP 的单点登录方案的设计与实现 –23– 图5.2 processRequest()方法流程图 图5.2 为请求处理方法 processRequest()的流程图,描述了其主要的处理过程。 在processRequest()方法中,我们可以很清楚的看到 SSOAuth 的所有功能: 如果用户还没有登录过,是第一次登录本系统,则就会被跳转到登录页面。用户在 提供了用户名和密码以后,就会用 handlerFromLogin()这个方法来验证。 如果用户已经登录过本系统,再访问别的应用的时候,是不需要再次登录的。因为 浏览器会将第一次登录时产生的cookie 和请求一起发送。效验cookie 的有效性是 SOAuth 的主要功能之一。 SSOAuth 还能直接效验非登录页面过来的用户名和密码的效验请求。 SSOAuth 还提供 logout 服务。 基于 LDAP 的单点登录方案的设计与实现 –24– 处理用户首次登录请求的功能函数 handlerFromLogin()的流程图如图 5.3 所示。 图5.3 handlerFromLogin()的流程图 图5.3 为方法 handlerFromLogin()的流程图,描述了其主要的处理过程。 handlerFromLogin()这个方法是用来处理来自登录页面的请求。它的逻辑很简单:将 用户输入的用户名和密码与预先从LDAP中读取的用户集合(存放在accounts中)相比较, 如果用户名或密码不匹配的话,则返回登录失败的页面,如果登录成功的话,需要为用 基于 LDAP 的单点登录方案的设计与实现 –25– 户当前的 session 创建一个新的 ID,并将这个 ID和用户名的映射关系存放到 SSOIDs 中 , 最后还要将这个 ID设置为浏览器能够保存的 cookie 值。 登录成功后,浏览器会派发到用户最初想访问的那个 URL。在 handlerFromLogin() 这个方法中,我们通过接收“goto”这个参数来保存用户最初访问的 URL,成功后便重 新定向到这个页面中。 另外,在设置 cookie 的时候,我使用了一个 setMaxAge(86400)的方法。这个方法是 用来设置 cookie 的有效期,单位是秒。如果不使用这个方法或者参数为负数的话,当浏 览器关闭的时候,这个 cookie 就失效了。在这里我给了个很大的值(1整天),导致的行 为是:当你关闭浏览器(或者关机),下次再打开浏览器访问刚才的应用,只要在 1天之 内,就不需要再登录了。 5.2 Web 应用的实现 由于校园投票系统和校园学生信息管理系统的实现方案相似,而且在本文的设计中 仅是为了配合实现单点登录方案的,所以在这里我只介绍一下校园投票系统的实现。 5.2.1 实现方案分析 要实现单点登录的方案,只有身份认证服务是不够的。由于本方案中采用了较为简 单的基于经纪人的单点登录方案,要想使多个应用具有单点登录的功能,还需要每个应 用本身的配合:将自己的身份认证的服务交给一个统一的身份认证服务 SSOAuth。 SSOAuth 服务中提供的各个方法就是供每个加入 SSO的Web 应用来调用的。 一般来说,Web 应用需要 SSO的功能,应该通过以下的交互过程来调用身份认证 服务的提供的认证服务: Web 应用中每一个需要安全保护的 URL 在访问以前,都需要进行安全检查,如果 发现没有登录(没有发现认证之后所带的 cookie),就重新定向到 SSOAuth 中的登陆页面 进行登录。 登录成功后,系统会自动给你的浏览器设置 cookie,证明你已经登录过了。 当你再访问这个应用的需要保护的 URL 的时候,系统还是要进行安全检查的,但 是这次系统能够发现相应的 cookie。 有了这个 cookie,还不能证明你就一定有权限访问。因为有可能你已经 logout,或者 cookie 已经过期了,或者身份认证服务重起过,这些情况下,你的 cookie 都可能无效。 应用系统拿到这个 cookie,还需要调用身份认证的服务,来判断 cookie 时候真的有效, 以及当前的 cookie 对应的用户是谁。如果 cookie 效验成功,就允许用户访问当前请求 的资源。 基于 LDAP 的单点登录方案的设计与实现 –26– 5.2.2 代码实现 本文中的两个 Web 应用对特定 URL 的保护均采用的是 filter 机制,下面以校园投 票系统为例进行说明。 校园投票系统应用的代理 filter 的doFilter()函数的流程图如图 5.4 所示。 图5.4 doFilter()的流程图 图5.4 为方法 doFilter()的流程图,描述了其主要的处理过程。 doFilter()方法的逻辑非常简单:在接收到请求的时候,先去查找是否存在期望的 cookie 值,如果找到了,就会调用 SSOService(cookieValue)去效验这个 cookie 的有效性 。 基于 LDAP 的单点登录方案的设计与实现 –27– 如果 cookie 效验不成功或者 cookie 根本不存在,就会直接转到登录界面让用户登录; 如果 cookie 效验成功,就不会做任何阻拦,让此请求进行下去。 在校园投票系统应用配置文件 web.xml 中,有下面的一个节点表示了此 filter 的URL 映射关系:只拦截/manage/下所有的 jsp 请求。 SSOFilter /manage/* 5.3 LDAP 目录服务的实现 在4.5 中,我们给出了 LDAP 目录树的设计,下面我们将给出目录树的实现设计。 用户属性定义如表 5.1 所示。 表5.1 用户属性定义 建立一个创建起始结点所用的 ldif 文件,init.ldif 文件: #init.ldif dn: dc=ssdut,dc=edu objectClass: dcObject objectClass: organization dc: ssdut o: ssdut.edu dn: ou=academicAdmin,dc=ssdut,dc=edu objectClass: organizationalUnit ou: academicAdmin 然后建立要导入的具体用户信息记录的 ldif 文件:user.ldif 文件: #user.ldif 序号 名称 说明 1 uid 用户 ID 2 objectclass 对象类型 3 cn 通用名称 4 sn 姓氏 5 userPassword 用户密码 基于 LDAP 的单点登录方案的设计与实现 –28– dn: uid=guoshuyang,ou=academicAdmin,dc=ssdut,dc=edu objectClass: inetOrgPerson userPassword: guoshuyang sn: guoshuyang cn: guoshuyang uid: guoshuyang dn: uid=kathy,ou=academicAdmin,dc=ssdut,dc=edu objectClass: inetOrgPerson userPassword: guoshuyang sn: kathy cn: kathy uid: kathy 将以上的用户信息导入后,单点登录验证系统的用户信息数据库就建立起来了。 基于 LDAP 的单点登录方案的设计与实现 –29– 6 校园身份管理系统中的单点登录的测试 现在让我们来测试这个身份管理系统: (1)打开 Internet 浏览器,在地址栏里输入地址 http://localhost:8080/StduentManager, 由于是首次登录系统,用户请求被重定向到 SSOAuth 的登录页面。如图 6.1 所示。 图6.1 首次登录学生信息管理系统 图6.1 为用户首次访问学生信息管理系统时,浏览器的显示页面。 (2)正确输入 LDAP 目录数据库中的一个用户 guoshuyang 的用户名和密码信息,并 提交给身份认证系统,身份认证系统通过了用户身份信息的验证,请求被派发到先前想 访问的页面 http://localhost:8080/StduentManager。如图 6.2 所示。 图6.2 正确输入用户信息后 基于 LDAP 的单点登录方案的设计与实现 –30– 图6.2 为用户输入用户 guoshuyang 的用户名和密码后,浏览器的显示页面。 (3)关闭浏览器再打开或者直接在地址栏里输入地址 http://localhost:8080/Vote,点击 页面上“投票系统维护”链接,这时你会发现,直接进入了投票系统的维护页面而无需 再次输入用户信息。而且你会发现页面上反映的用户名和图 6.2 是一致的,均为 guoshuyang。如图 6.3 所示。 图6.3 再次登录投票管理系统时 图6.3 为用户再次访问校园投票系统时,浏览器的显示页面。 (4)点击图 6.2 所示的页面上“注销”链接后,在地址栏里再输入地址 http://localhost:8080/Vote,然后点击页面上的投票系统维护链接,这时你又会发现,请 求被派发到了 SSOAuth 的登录页面。如图 6.4 所示。 图6.4 注销后再次登录投票管理系统时 基于 LDAP 的单点登录方案的设计与实现 –31– 图6.4 为用户注销后再次访问学生信息管理系统时,浏览器的显示页面。 由以上测试可知,单点登录方案得到了成功的实现,真正达到了一次登录,可以访 问不同的应用服务的设计目标。 基于 LDAP 的单点登录方案的设计与实现 –32– 结论 我们只是在实验室环境下实现了一个简单的基于 LDAP 的校园网络应用中的单点 登录系统。仅仅是对单点登录系统的设计与实现做了一些有益的探索,主要在于尝试了 用户电子身份标识的自动安全传递和多个系统之间的信任关系建立,并利用它们来实现 单点登录。用户信息存储在 LDAP 目录中,使其能够对大量的查找和搜索操作做出快速 响应。经过测试基本达到了系统设计的功能要求,是在安全性和功能方面还有许多地方 需要完善: (1)安全局限性 采用 SSO技术的主要目的之一就是加强安全性,降低安全风险。因为采用了 SSO, 在网络上传递密码的次数减少,风险降低是显然的,但是当前的方案却有其他的安全风 险。由于 cookie 是一个用户登录的唯一凭据,对 cookie 的保护措施是系统安全的重要 环节: ① cookie 的长度和复杂度 在本方案中,cookie 是有一个固定的字符串(“Auth”)加上当前的时间戳。这样的 cookie 很容易被伪造和猜测。怀有恶意的用户如果猜测到合法的 cookie 就可以被当作已 经登录的用户,任意访问权限范围内的资源。 ② cookie 的效验和保护 在本方案中,虽然密码只要传输一次就够了,可cookie 经常在网络中的不同应用之 间传来传去。我们没有考虑 cookie 在传输时候的保护,一些网络探测抓包工具可以很容 易捕获到 cookie 的数值。另外对 cookie 的效验也过于简单,并不去检查发送 cookie 的 来源究竟是不是 cookie 最初的拥有者,也就是说无法区分正常的用户和仿造 cookie 的 用户。 (2)功能局限性 使用单点登录验证服务的 Web 应用的过滤规则是 Filter,而 Filtr 只能用于 J2EE 的 应用,而对于大量非 Java 的Web 应用,却无法得到单点登录身份验证系统的服务。此 外,由于采用基于经纪人的单点登录方案,在将 Filter 应用到 Web 应用的时候,需要对 容器上的每一个应用都要做相应的修改,重新部署。 基于 LDAP 的单点登录方案的设计与实现 –33– 参考文献 [1] 郝玉龙 .J2EE 编程技术.北京:清华大学出版社,2005. [2] The OpenLDAP project website.http://www.openldap.org/. [3] 来竟,郎听培.基于角色和目录服务的细粒度访问控制方法.计算机与数字工程.2006,34(9):34- 36. [4] [美]Christopher Steel ,Ramesh Nagappan,Ray Laiz.Core[著],陈秋萍,罗邓,袁国忠[译]. 安全模式-J2EE、Web 服务和身份管理最佳实践与策略.北京:机械工业出版社,2006. [5] 潘飞.统一身份认证系统的研究和单点登录的实现:(硕士学位论文).西安:西北大学计算机应用 技术专业,2006. [6] 张颖江,郑秋华,李腊元.单次登录技术分析及集中身份平台设计研究.武汉理工大学学报(交通 科学与工程版),2004.28(2): 240-243. [7] ]W. Yeong,T.Howes,S. Kille. Lightweight Directory Access Protocol. RFC 1771.2003: 1-57. [8] 赵保翠,刘岗.基于LDAP 的统一用户管理系统的设计和实现.微电子学与计算机.2005, 22(11):59-62. [9] 尹文平,兰雨晴.基于LDAP 的用户统一身份认证管理系统的设计与实现.计算机系统应 用.2005,10(10):18-21. [10](美)Daniel Blum.Understanding Active Directory Services .美国:Microsoft Press:2002 [11] 陈庆章 .TCP/IP 网络原理与技术.北京:高等教育出版社,2006. [12] RFC2253.Lightweight Directory Protocol (v3):UTF-8 String Representation of Distinguished Names.Critical Angle Inc.1997. [13] RFC2252.Lightweight Directory Access Protocol (v3):Attribute Syntax Definitions. Critical Angle Inc.1997. [14] 董亮卫,汪文勇.支持单点登录的统一资源管理体系研究.计算机应用.2006,26(5):1146-1148 [15] 李旭伟,汤丽. B/S 架构的单点登录系统模型.四川大学学报.2006,38(2):132-136 基于 LDAP 的单点登录方案的设计与实现 –34– 致 谢 本研究及学位论文是在我的导师周勇副教授的亲切关怀和悉心指导下完成的。他严 肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。从课 题的选择到项目的最终完成,周老师都始终给予我细心的指导和不懈的支持。周教授不 仅在学业上给我以精心指导,同时还在思想、生活上给我以无微不至的关怀,在此谨向 周老师致以诚挚的谢意和崇高的敬意。 在此,我还要感谢在一起愉快的度过本科生生活的软件学院 1舍507 的同学们,正 是由于你们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。 特别感谢我的朋友荆雯,她对本课题做了不少工作,给予我不少的帮助。 在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有 多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意! 最后我还要感谢培养我长大含辛茹苦的父母,谢谢你们!

下载文档,方便阅读与编辑

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

需要 10 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档