Jetspeed2.0的安全架构为保护门户内的各种资源提供了一套广泛的安全服务。这套安全服务是完全独立于其他的门户服务,甚至可以从门户应用中抽取出来。这套机制的核心部分是依靠JAAS提供的认证,授权功能。Jetspeed2.0的安全服务是建立在一套安全模块和扩展安全模块上的,并提供了一个SPI模型。通过修改和配置特定的处理方式,使用这个SPI模型可以修改系统内部提供的一些安全服务(比如用户管理,角色管理,用户组管理)。
JAAS简介
Java Authentication Authorization Service(JAAS,Java验证和授权服务)提供了灵活和可伸缩的机制来保证客户端或服务器端的Java程序。JAAS强调的是通过验证谁在运行代码以及他/她的权限来保护系统免受用户的攻击。它让你能够将一些标准的安全机制,例如Solaris NIS(网络信息服务)、Windows NT、LDAP(轻量目录存取协议),Kerberos等通过一种通用的,可配置的方式集成到系统中。
使用JAAS的好处在于通过在应用程序和底层的验证和授权机制之间加入一个抽象层,可以简化涉及到Java Security包的程序开发。抽象层独立于平台的特性使开发人员可以使用各种不同的安全机制,而且不用修改应用程序级的代码。JAAS通过一个可扩展的框架:服务提供者接口(Service Provider Interface,SPI)来保证程序独立于安全机制。服务提供者接口是由一组抽象类和接口组成的。其中主要的接口有LoginContext,应用程序级的代码主要调用这个接口。在LoginContext下面是一组动态配置的LoginModules。不同的LoginModule使用具体的安全机制进行验证,这些安全模块可以堆叠在一起使用。
架构(Architecture)
Jetspeed2.0内部实现了一个缺省的LoginModule和一个缺省的授权策略。认证通过后会创建用户的唯一标示,并且将用户所有的主体(principal)组装成一个主题(subject)。然后通过主题中的主体信息使用AccessController来判断用户可以访问那些资源。
下图是Jetspeed2.0的安全架构图:
http://portals.apache.org/jetspeed-2/multiproject/jetspeed-security/images/arch-overview.gif
认证(Authentication)
Jetspeed2.0内部提供一个缺省的Login Module来验证用户有效性,用关系数据库存放用户信息。Login Module验证用户是通过内部服务UserManager实现的,UserManager提供了一套简单的用户认证和管理服务。比如获得某个组名或某个角色名下的用户;设置新的密码;设置密码有效期等。认证SPI具体实现了用户主体和凭证的管理,是内部服务UserManager功能的具体实现。
认证SPI包含四个组件:
AuthenticationProviderProxy——认证供应者的代理,根据用户返回相应的认证供应者。
AuthenticationProvider——提供用户认证和管理的具体实现。目前在Jetspeed2.0中有两种方式:RDBMS和LDAP,通过配置可实现复合的认证方式。
CredentialHandler——安全凭证处理,分为DefaultCredentialHandler(关系数据库)和LdapCredentialHandler。
UserSecurityHandler——用户安全信息的持久化,分为DefaultUserSecurityHandler(关系数据库)和LdapUserSecurityHandler。
在缺省的凭证处理中增加了一些密码管理功能。如:
•提供可定制的密码凭证实现
•密码加密
•密码有效性校验
•控制凭证生命周期
•密码的拦截机制:如果定义了会在以下几种情况调用拦截机
o从持久层从新装载一个凭证之后
o验证了一个用户后
o在一个新的凭证被保存到持久层之前
o在一个新的密码被保存到凭证之前
o校验密码有效时
o当凭证装载需要密码加密时
o当密码超过生命周期时
o密码认证超过最大次数时
o当强迫使用新的密码代替旧密码时
授权(Authorization)
Jetspeed2.0使用关系数据库存储主体和权限之间的关系,实现了自己定义的安全策略。在这里需要说明三个概念:
权限(permission):动作与资源的关系
主体(principal):系统中实体的描述。这里有三个主体用户;角色;组
策略(policy):主体与权限之间的关系
下面是一些举例:
grant principal o.a.j.security.UserPrincipal "theUserPrincipal" {
permission o.a.j.security.PagePermission "mypage", "view";
permission o.a.j.security.PortletPermission "myportlet", "view,edit,minimize,maximize";
permission o.a.j.security.TabPermission "mytab", "view";
};
grant principal o.a.j.security.RolePrincipal "theRolePrincipal" {
permission o.a.j.security.PagePermission "mypage", "view";
permission o.a.j.security.PortletPermission "myportlet", "view,edit,minimize,maximize";
permission o.a.j.security.TabPermission "mytab", "view";
};
grant principal o.a.j.security.GroupPrincipal "theGroupPrincipal" {
permission o.a.j.security.PagePermission "mypage", "view";
permission o.a.j.security.PortletPermission "myportlet", "view,edit,minimize,maximize";
permission o.a.j.security.TabPermission "mytab", "view";
};
在使用时是通过用户的主体来判断用户的使用权限的,因此当执行一个访问控制检查时应该是这样调用的:doAsPrivileged(theSubject, anAction, null)。在这里AccessContolContext是ull,这就说明并不需要知道谁来调用的,重要的是给定的用户的主体是否有权访问此资源。
在Jetspeed2.0里定义了一个内部服务PermissionManager来管理主体与权限间的关系。权限和主体都对应一个对象并且与一个表对应。主体是InternalPrincipal类对应表SECURITY_PRINCIPAL;权限是InternalPermission类对应表SECURITY_PERMISSION;他们之间是多对多关系,存放在表PRINCIPAL_
PERMISSION中。
授权SPI实现了用户,角色,组之间的关系,提供RoleManager和GroupManager管理角色和组。同时角色或组是由继承关系的,继承关系分为普通和集合两种:普通就是后一个拥有前一个的权限,即子拥有父的;集合就是高一级的拥有低一级的权限。
配置(Configuration)
Jetspeed2.0中缺省的安全机制使用关系数据库来存储安全信息。所有的SPI配置文件都在 ${jetspeed-source-home}/portal/src/webapp/WEB-INF/assembly/ 目录下
.security-atn.xml——配置login module
.security-atz.xml——配置授权策略
.security-managers.xml——配置安全管理员
.security-providers.xml——配置各种Provider和相关的SPI
.security-spi.xml——配置通用的认证、授权SPI
.security-spi-atn.xml——配置所有的认证SPI
.security-spi-atz.xml——配置所有的授权SPI
所有的配置文件信息请参考相关文档
总结
Jetspeed2.0使用JAAS安全框架实现了一个良好的安全机制,整个框架体系简单明了,具有很好的扩展性和可移植性。基于角色的访问控制(RBAC)支持多层继承策略,使在应用部署时具有很高灵活性。目前在内部的安全服务处理上还相对简单,在具体应用时还需要完善。
分享到:
相关推荐
**JetSpeed2.0安全机制** JetSpeed2.0提供了一套全面的安全机制,用于保护门户及其集成的应用程序。这套机制包括身份验证、授权、会话管理等,以确保只有经过身份验证的用户才能访问特定的portlet或资源。此外,...
以一个实例形式讲解基于jetspeed2.0的portlet二次开发。
标题“Jetspeed2.0中的PSML介绍”向我们揭示了文档的主题,即PSML(Portal Structure Markup Language)在Apache Jetspeed 2.0中的应用。Apache Jetspeed是一个开源的企业信息门户解决方案,它提供了一个框架和一...
jetspeed-api-2.0的lib包
**JETSPEED2.0 概述** Jetspeed2 是一个符合 JSR-168 和 JSR-286 规范的portlet容器,允许开发者将多个不同的Web应用程序(如Struts、WebWork、JSP、Perl、PHP等)集成到一个统一的门户界面中。其核心特性包括强大的...
maven-jetspeed2-plugin-2.0.jar
本压缩包里含有了开发一个jsr168 portlet所需要的软件 本想包含jetspeed2.0的安装程序的,可是最多智能上传10M <br>从环境配置讲到开发步骤。 并表明了很多注意的地方 本包适合初学portlet的人使用
#### JetSpeed2.0概述 JetSpeed2.0(简称J2)是Apache基金会推出的开源企业门户框架。它在2005年12月发布了最终的Release版本,用户可以从官方网站下载到源代码以及捆绑Tomcat的压缩包。相较于前一代产品JetSpeed1.x...
本文档是Jetspeed2 Deployer Guide的中文翻译,旨在帮助初学者理解如何部署和配置Jetspeed2的安全机制。 在Jetspeed2的安全部署配置中,有两个主要的认证策略:Permissions(权限)和Constraints(约束)。...
3. **安全和身份管理**:内置的安全机制支持角色基础的访问控制,确保数据的安全性。 4. **内容管理**:与多种内容管理系统集成,如JSPM、WebDAV等,方便内容的发布和管理。 5. **集成能力**:支持与其他企业级...
Jetspeed2是Apache软件基金会下的一个项目,它遵循JSR-168(portlet规范1.0)和JSR-286(portlet规范2.0),提供了一个标准的portlet运行环境。Jetspeed2的核心功能包括portlet管理、个性化、内容聚合、权限控制等...
在配置部分,文档可能详细讲解了如何定制Jetspeed的portlet容器,配置安全设置,以及调整性能参数。理解这些内容对于顺利运行和管理Jetspeed2至关重要。 接着是“Jetspeed2总结.docx”,这很可能是前公司同事在实际...
通过与LDAP的集成,Jetspeed 实现了安全的身份管理和权限控制。理解其源码、工具的使用以及LDIF文件的作用,将有助于开发者更好地构建和维护企业级的门户应用。在实际工作中,深入学习和应用这些知识点,可以提升...
Jetspeed是Apache组织开发的一个采用Java和XML的开放源代码的企业信息门户的实现。门户可以让终端用户可以很方 便的访问网络资源(应用、数据库等)。用户可以通过Web浏览器、WAP手机、寻呼机以及其它一些智能设备来...
- **安全性和权限管理**:支持基于角色的访问控制,保护portlet和门户的安全性。 #### Portlet 概述 Portlet是在门户页面中显示数据的可见组件。一个典型的门户网站页面可能包含多个portlet,每个portlet负责展示...
同时,具备强大的权限管理机制,可以控制不同用户对portlet的访问和操作权限。 3. **内容管理系统**:内置的内容管理系统(CMS)允许用户创建、编辑和发布内容,且与portlet集成,提供了丰富的内容展示方式。 4. **...
它为用户提供了一个强大的安全机制,确保所有门户访问的安全性。Jetspeed的核心优势在于能够将多个独立的门户组件聚合在一个页面中,这些组件本身也是独立的Jetspeed应用程序。这种设计使得信息可以从各种资源中以...