>
首页 » 业界动态 » 面向方面的Web应用授权框架分析

面向方面的Web应用授权框架分析

作者:  时间:2007-10-31 11:14  来源:
引 言

软件最大限度地移植使用是软件开发人员所追求的目标。其中,代码和架构移植一直作为软件可移植性的重要突破口。尽管这方面已经得到一定重视,但是,因为这样重复劳动而造成的损失仍然是非常巨大的,比较突出的问题在于,开发人员忽视系统框架的重复使用所能带来的巨大效能,没有在系统设计之初就将这个问题考虑进系统设计方案,但在系统完成过程中会摸索出一定框架重用规律,这时才发现已经进行_了大量的重复劳动。本文将以系统授权框架为例,分别从重用性的优点、创建可重用的授权框架、保证实现安全性等方面描述可重性研究。

1 授权框架重用的效益分析

一个经验丰富的程序员,会在程序编写开始前思考自己所负责部分总体框架、各个模块之间的相互关联、是否有可重用的代码提取出来等,最终在其小范围内实现最大程度的代码移植。而框架的重复使用实际上在代码重用的基础上提高一个档次来考虑可重用方案,这样效益提高必然更快,程序员在体验到代码重用的好处之后不难领会框架重用的甜头。

重复使用应用程序授权框架可以实现代码高移植性、缩短软件开发周期、减少程序员的工作最等诸多优势,主要表现在:

a)组织内的开发人员可以将一个应用程序授权框架作为工作目标,提升开发人员的积极性。授权框架是安全系统中小可或缺的重要组成部分,但是授权框架逻辑性强,结构复杂,实现困难,而儿其贯穿于系统始终,框架的完整性是系统资源安全的重要后盾。以往的程序开发过程,每对应一个应用系统,必定有其一套授权框架,如果开发人员集中精力实现一个可重用的程序授权框架,必将大大缩短软件开发周期,减少了开发人员的工作量,提高他们的工作积极性。
b)开发人员可以简单地在其他应用程序中重复使用支持应用程序授权框架的组件,因为这些应用程序使用了标准的授权方法。开发授权重用框架前要制定严格的技术规范,保证授权框架是通用意义上的重用,如果没有统一的标准,必然造成小规模的统一、大规模的重复,仍然没有实现实际通用的授权框架。

c)授权子系统成为与其他系统或平台同步的中心。共同的资源属于同一个授权子系统,如果出现新增的应用程序,它只需调用授权子系统就实现了与旧应用系统的同步授权信息。这样,授权子系统就为不同的应用程序提供统一的授权平台,成为系统或平台同步的中心。

d)授权管理在多个应用程序中达到一致,管理和操作人员就能进行相同的工作,大大减少开发成本。授权管理在系统运行过程中是一项工作量相当大的工作,而且要求工作细致认真,管理员一旦疏忽就会造成有访问权限的用户访问不到资源,没有权限的用户越权浏览信息,容易造成资源流失、泄密等重大事件。

2 可重用授权框架的实现

2.1 .NET平台基于AOP创建可重用的授权框架

在.NET平台下,可以选择在应用程序中重复使用的应用程序授权框架有:重复使用一个授权数据库和一个访问授权数据的XML Web Service;基于AOP(面向方面编程)的授权信息、日志记录、系统性能监测的横切关注点织入(introduce)。

图1所示的是一个显示实现应用程序授权重复使用的示例。

在应用程序授权重复使用的逻辑表示图中可以看到:不同的应用程序可以重复使用相同的授权框架;授权服务提供对授权数据的安全访问;中央数据库保存授权数据;一个管理实用程序提供所有的配置;本地缓存改进授权性能。其中,应用程序问的授权框架依靠访问授权服务Web Setrvice米实现共用,解决授权信息的跨系统跨平台的共用。各个应用程序的内部授权框架共用部分通过AOP技术来横切实现。

在系统的业务逻辑中,权限信息散落在不同应用的业务层的不同角落,它们不存在先后上下的逻辑关系,但是它们自身运行的业务逻辑又极其相似,这就符合AOP技术的设计思想,也为可重用的授权框架建立奠定理论基础。

实现AOP的技术特性包括:

a)join point(连接点):是程序执行中的一个精确执行点,例如类中的一个方法。它是一个抽象的概念,在实现AOP时,并不需要去定义一个join point。

b)point cut(切入点):本质上是一个捕获连接点的结构。在AOP中,可以定义一个point cut,来捕获相关方法的调用。

c)advice(通知):是point cut的执行代码,是执行"方面"的具体逻辑。

d)aspect(方面):point cut和advice结合起来就是aspect,它类似于OOP中定义的一个类,但它代表的更多是对象间横向的关系。

e)introduee(引入):为对象引入附加的方法或属性,从而达到修改对象结构的目的。有的AOP工具又将其称为mixin。

以资源访问控制系统为例,在系统中添加、修改、删除资源均需要验证用户权限信息,这样就找到了3个join point,而系统中这一系列的join point,只需要定义一个point cut。当系统执行到join point处时,将根据定义去奁找对应的point cut,然后执行这个横切关注点需要实现的逻辑,即advice。而point cut和ad-vice,就绀合成了一个权限管理aspect。最后只需要巧妙地将aspect织入具体的实现类。至此,静态的横向切入就完成了。业务流程如图2所示。

2.2 保证实现的安全性

授权服务是在身份认证的丛础上实现的,如图3所示。为保证授权框架移植后的安全性,用户的身份认汪、信息安全传输等相关的问题必须考虑。

为了保证可重复使用的授权框架的安全性,需要考虑以下儿个方面的程序设计:

a)对授权数据存储库的调用者执行身份验证检查。授权系统是运行在身份认证的基础上,实现授权框架的呵重用并不代表用户身份认证也是可重用的。为防止非授权方查询授权信息,对于授权数据存储库的调用者仍然要执行身份验证检查。为克服这种情况的出现,在用户身份认证完成之后,将用户信息和授权信息写入Session中,在进行相关资源访问时要求检验其Session中的权限信息,这样,非授权方没有用户和权限信息存放在Session,自然就访问不了资源,只有通过重新的身份认证之后才成为授权用户。

b)使用安全传输。信息的安全传输并不包括在授权框架范围内,但是,授权信息不仅包括权限信息还包括部分用户信息,它是需要在服务器与客户端之间传输的,能否保证授权信息的安全传递、在传递过程中是否发生截获、伪造、篡改等行为都是无法预知的。基于信息安全传递的考虑,必须使用如SSL或IPSec等加密手段来保证授权框架重复使用的实现。

c)在各个应用程序的单独目录中部署授权服务。使用授权子系统的目的也是为了保证资源和系统的安全,对于系统来讲,任何一点小的纰漏都可能是致命的打击,所以有时程序员不等不采用双保险甚至多保险的手段。授权服务不仅可以部署在应用之上,如果还可以部署应用服务(如XML Web Service)在各个应用程序目录中,这样可以通过配置服务,使其仅在部署它的应用程序中发挥作用,实现资源的双重保险。

3 改进可重用授权框架的性能

授权服务运行在用户访问资源的整个过程,授权服务需要频繁地进行读库出库的操作,这样势必影响系统运行效率。为了克服这一弊端,保证授权框架重用的可行性,可以使用以下技术改进可重复使用的应用程序授权框架的性能:

a)尽可能使用成批授权查询,以避免频繁的进程外操作。例如,用一个请求为多个用户检索角色,在授权服务时设置进程等待和时间间隔,可以实现一进程为多个用户进行角色检索,提高系统效率。

b)将授权数据缓存到距离内存存储库(如Hash-table)很近的位置。缓存还可以降低对底层存储库的位置和组织的依赖性。为了改善性能和增强安全性,应该为每台主机设置单独的缓存。

c)实现缓存信息的预定刷新或按需刷新。

d)实现授权缓存的延迟初始化,避免在未进行访问检查时检索授权信息。

相关推荐

面向方面的Web应用授权框架分析

Web应用;授权框架  2007-10-31
在线研讨会
焦点