SSO的基本原理
关键字: sso
SSO(Single Sign-On)直译为一次登录,SSO的机制就是在企业网络用户访问企业网站时作一次身份认证,随后就可以对所有被授权的网络资源进行无缝的访问,SSO 可以提高网络用户的工作效率,降低了系统出错的几率,但是比较难于实现。
1 SSO简介
SSO(Single Sign-On)直译为一次登录,形象的解释是"单点登录、全网漫游",意思就是说所有已相同的DNS域名结尾的机器,可以共享用户的认证信息,比如:a.chinacreator.com,b.chinacreator.com就可以经过配置后实现SSO。
SSO的机制就是在企业网络用户访问企业网站时作一次身份认证,随后就可以对所有被授权的网络资源进行无缝的访问,而不需要多次输入自己的认证信息。
SSO 可以提高网络用户的工作效率,降低网络操作的费用,并提高网络的安全性,而且降低了系统出错的几率,但是比较难于实现。
1.1 以前的用户登录模式
为了实现企业的信息化、电子商务和其他需求,越来越多的信息系统在网上出现,这些企业的网络用户和系统管理员不得不面对这个现实:
1. 用户需要使用其中的任何一个企业应用的时候都需要做一次身份认证,而且每一次认证使用的认证信息(用户民和密码)不能保证一致;
2. 系统管理员需要对每一个系统设置一种单独的安全策略,而且需要为每个系统中的用户单独授权以保证他们不能访问他们没有被授权访问的网络资源。
1.2 SSO登录模式
以前使用的登录系统中,需要给每一台机器上的系统,甚至是每台机器上的每个应用准备一套用户管理系统和系统用户授权策略,考虑到互操作的可操作性和安全问题,SSO将一个企业内部所有域中的用户登录和用户帐号管理集中到一起,SSO的好处显而易见:
1. 减少用户在不同系统中登录耗费的时间,减少用户登录出错的可能性
2. 实现安全的同时避免了处理和保存多套系统用户的认证信息
3. 减少了系统管理员增加、删除用户和修改用户权限的时间
4. 增加了安全性:系统管理员有了更好的方法管理用户,包括可以通过直接禁止和删除用户来取消该用户对所有系统资源的访问权限
2 SSO理论基础
SSO并不是J2EE中的标准实现,而是各家中间件提供商在提供J2EE应用服务器集群时提供的一种认证信息共享的机制,所以各家厂商提供的实现方式不一样,IBM的WebSphere是通过cookies记录认证信息,BEA的WebLogic通过session共享技术实现认证信息的共享,国内深圳金蝶的apusic采用的和BEA的技术基本一致。
但是不管各家的实现技术怎么样,他们的理论基础都缘于J2EE中的安全技术:Java Authorization Contract for Containers (Java ACC)和JavaTM Authentication and Authorization Service(JAAS)。Java Authorization Contract for Containers (Java ACC)和JavaTM Authentication and Authorization Service(JAAS)是j2ee技术中实现安全访问机制的规范和标准,其中Java ACC属于j2ee规范的一部分,而JAAS是Java ACC的实现部分。
2.1 Java ACC
Java ACC规范定义了授权策略模块和J2EE容器之间的实现规范,这样容器安全提供者就可以根据操作环境的要求提供J2EE容器的授权功能。
Java ACC规范分为三个部分,分别是:提供着配置规范,安全策略配置规范,策略判断和执行规范。这三个部分组合在一起共同描述了授权提供者的安装和配置,J2EE容器使用者可以根据这些规范来实现访问控制。
1. 安全提供者配置规范规定了对安全提供者和容器的要求,这些是安全策略提供者和容器之间整合的基础。
2. 安全策略配置规范定义了容器配置工具和安全提供者之间的交互规范,所谓的交互是指如何将声明的授权策略信息转化为J2SE策略提供者可以识别的指令的过程。
3. 策略判断和执行规范定义了容器策略执行点和安全提供者之间的交互,他实现了J2EE容器需要的安全策略判断。
大家可以到 http://java.sun.com/j2ee/javaacc/下载规范文档。
2.2 JAAS
JAAS全名是JAVA认证和授权服务,它是一组java包,为提供基于用户的认证和访问控制提供支持,它是标准可嵌入式认证模型(PAM)的java版本实现,支持基于用户的身份认证。
JAAS是J2SE1.3中的可选包,但是J2SE1.4中已经集成了JAAS.
标准可嵌入式认证模型(PAM)的具体内容大家可以查看 http://java.sun.com/security/jaas/doc/pam.html,JSSA的规范大家可以到 http://java.sun.com/products/jaas/查看。
3 WebSphere中的SSO
3.1 WebSphere中的SSO
SSO在IBM的产品中得到了完全的体现,包括在WebSphere集群中,在WebSphere和Domino的集成中,都可以实现。
SSO允许网络用户在访问多个WebSphere域的多个应用时只要向其中的某一个WebSphere应用服务器进行认证,就可以访问其他WebSphere域中的各种资源,包括HTML页面,JSP文件,Servlet和企业EJB,也可以访问其他Domino中的文档,而不需要登录多个WebSphere域。
WebSphere中默认不支持SSO,如果需要实现SSO,需要对每一台WebSphere服务器进行配置,如果需要实现WebSphere和Domino之间的SSO,则对WebSphere和 Domino 都要重新配置。
3.2 前提条件
要实现WebSphere服务器之间的SSO,必须满足以下前提条件:
1. 所有的服务器必须配置成同一个DNS域的一部分。
比如: DNS域配置为mydomain.com,那么,SSO将在所有Domino和WebSphere服务器起作用,只要他在属于这个DNS域的某个主机上,比如说在a.mydomain.com和b.mydomain.com的主机上配置的两台webpshere服务器之间。
2. 所有服务器必须共享用户注册表,用户注册表可以是LDAP数据库,在WebSphere服务器之间实现SSO还可以采用用户自己实现的用户注册表,但是Domino不支持用户自己实现的用户注册表,所以WebSphere和Domino之间实现SSO时只能采用LDAP数据库作为公有的用户注册表。
[注] 使用的LDAP数据库必须是WebSphere支持的LDAP数据库,推荐使用IBM的Security Way.
3. 所有的用户定义在一个单一的LDAP目录中。
4. 用户的浏览器必须支持Cookies,因为服务器生成的信息将通过Cookies传递到客户端,然后会提交给用户访问的其他服务器进行认证。
5. WebSphere应该是3.5版本或者以上版本。
3.3 SSO授权机制
WebSphere中的SSO授权机制比较简单,采用了类似于windows文件的权限管理的机制,就是先定义一些角色,然后给这些角色授予访问某些服务器资源的权限,然后再将这些角色映射到具体的用户或者用户组。
比如:我们开发了一个WebSphere服务器上的web应用,这个应用的管理员可以使用这个web应用的管理权限,和管理权限相关的文件都放在这个应用的/admin目录下,那么我们就可以给这个应用增加一个admin的角色,它可以访问/admin目录下的所有文件,然后把这个admin角色映射到所有管理员角色所在的LDAP数据库中的某个组,如图所示:
4 LDAP数据库简介
LDAP的英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。它是基于X.500标准的,与X.500不同的是,LDAP支持TCP/IP。LDAP 标准的规范是以一系列 RFC(或注释请求,Request For Comment)的形式编排的。有关与 LDAP 相关的 RFC 的更多信息,可以参考 http://www.ldapman.org/ldap_rfcs.html。
LDAP中的信息都被存储在目录中,LDAP不是关系型数据库,它的信息目录结构类似于UNIX的文件系统,这种树-叶结构的结构使LDAP有很好的扩充性,而且查询速度比关系型数据库要快。
大多数的LDAP服务器都为读密集型的操作进行专门的优化,也就是说如果你的应用中信息读取操作很多,而修改信息很少的话,那么您可以采用LDAP数据库。从LDAP服务器中读取数据的时候会比从专门为 OLTP优化的关系型数据库中读取数据快一个数量级。
因为专门为读的性能进行优化,大多数的LDAP目录服务器 并不适合存储需要需要经常改变的数据。例如,可以用LDAP服务器来存储公司的组织机构和员工信息,但是LDAP一般不适合作为电子商务站点的数据库服务器。