用户操作
[即时聊天] [发私信] [加为好友]
王浩ID:peterwanghao
20779次访问,排名6242,好友0人,关注者1人。
peterwanghao的文章
原创 14 篇
翻译 1 篇
转载 4 篇
评论 12 篇
最近评论
wenwen8104:王浩老师,真不错拉
eminem1013:非常感谢楼主的回答,真的非常感谢。
验证的方式有5种(from,url,url.base64,base,base.prevent)。
其中base认证(也有称之为基本认证)的域(reaml)应该是被集成站点自己的认证信息,为什么在SSO管理里面可配置?
还有就是您说的系统要整合的其他站点和直接通过url后面加参数的方式访问其他系统有什么区别?是否表示如果被整……
eminem1013:关于jetspeed2的SSO,我有几个地方不大明白,希望楼主和各位牛人能赐教:
1。为什么需要SSO Iframe portlet专门来为Iframe portlet形式集成进来的系统做单点登陆服务呢。不能直接通过sso sites和sso details两个portlet来完成吗?
2。还有为什么jetspeed2.1版本的SSO Iframe portl……
Rainfall2000:你好,我最近是被BouncyCastle的安装搞昏了头,希望能得到你的帮助。我用的是jdk 1.6。
运行到SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithSHAAndTwofish-CBC");时总是出现Exception in thread "main" java.security.NoSuc……
swift3907:不错
见识了,准备用jetspeed做一个基于网格的供应链系统
文章分类
收藏
    相册
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 Jetspeed2.0的安全机制收藏

    新一篇: PKCS#7格式数字签名验证 | 旧一篇: 集群环境下的缓存同步和出错恢复

           Jetspeed2.0的安全架构为保护门户内的各种资源提供了一套广泛的安全服务。这套安全服务是完全独立于其他的门户服务,甚至可以从门户应用中抽取出来。这套机制的核心部分是依靠JAAS提供的认证,授权功能。Jetspeed2.0的安全服务是建立在一套安全模块和扩展安全模块上的,并提供了一个SPI模型。通过修改和配置特定的处理方式,使用这个SPI模型可以修改系统内部提供的一些安全服务(比如用户管理,角色管理,用户组管理)。

     
    JAAS简介
           Java Authentication Authorization ServiceJAASJava验证和授权服务)提供了灵活和可伸缩的机制来保证客户端或服务器端的Java程序。JAAS强调的是通过验证谁在运行代码以及他/她的权限来保护系统免受用户的攻击。它让你能够将一些标准的安全机制,例如Solaris NIS(网络信息服务)、Windows NTLDAP(轻量目录存取协议),Kerberos等通过一种通用的,可配置的方式集成到系统中。
           使用JAAS的好处在于通过在应用程序和底层的验证和授权机制之间加入一个抽象层,可以简化涉及到Java Security包的程序开发。抽象层独立于平台的特性使开发人员可以使用各种不同的安全机制,而且不用修改应用程序级的代码。JAAS通过一个可扩展的框架:服务提供者接口(Service Provider InterfaceSPI)来保证程序独立于安全机制。服务提供者接口是由一组抽象类和接口组成的。其中主要的接口有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)支持多层继承策略,使在应用部署时具有很高灵活性。目前在内部的安全服务处理上还相对简单,在具体应用时还需要完善。

    发表于 @ 2006年08月23日 17:32:00|评论(loading...)|编辑

    新一篇: PKCS#7格式数字签名验证 | 旧一篇: 集群环境下的缓存同步和出错恢复

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 王浩