论文部分内容阅读
随着面向服务架构(SOA)相关技术与产品的不断发展与成熟,它逐渐成为软件发展的方向,越来越多的企业和组织选择将自己的业务以服务的形式提供到网上,以方便自己的业务集成或其它用户的调用,服务提供了很好的灵活性与开放性,可很好的集成原有的资源,但在灵活与开放性的同时,暴露在网上的服务将面临更加严峻的安全性问题,怎样保证授权用户能透明地访问各种服务以及防止非法用户的攻击将是一个迫切的需求,即在面向服务环境下实现安全的单点登陆与访问控制是一个重要课题。面向服务环境下的基本组成部分是服务,一个业务可由一系列服务构成,一个应用可由一系列业务构成,也就是说一个应用可能包括很多的服务,为了能保证服务不被非授权访问,在访问服务时常常需要进行身份认证,但一个应用或一个业务可能由很多服务构成,如果每访问一个服务都要求用户输入自己的身份信息,这将是不可想象的,这样会造成使用非常不方便。和访问一般的站点类似,在面向服务环境下也有“单点登录”概念。和以往的单点登录一样,指用户进行一次登录后就可以访问多个站点,在这里指访问服务,而无需重复认证自己。要实现单点登录,可以有多种方式,在本系统中我们采用基于标准的SAML令牌方式来实现SOA环境下的单点登陆。由于服务具有开放性的同时带来了的安全隐患,任何人都可以轻易发现服务,但要保证只有授权用户才能使用服务是访问控制要解决的问题,单点登陆可以让服务知道用户身份,访问控制是进一步对用户进行授权检查,以往的访问控制方法一般有三种:采用Filter方式,在方法里插入访问控制代码以及采用代理模式来实现。采用Filter是争对URI来实现的,在应用程序中不好实现,代的程序中不太好实现,如果采用Struts,XWork或者Tapestry,采用同一个URL(浏览器看来)进行处理多项任务已不是什么稀奇的事,所以其应用范围受到限制;在方法里插入访问控制代码虽然可以实现,但这样代码具有很强的紧密耦合性,扩展修改难度大;以代理模式为每个功能类实现一个相应的代理(Proxy)类,虽然解耦了程序功能和权限检验,但是,从某个角色的权限检验这个切面考虑,涉及具体Proxy类太多,扩展修改难度大。综合前面方式的不足,本文采用XACML与AOP相结合的方式来实现访问控制,AOP因为引入了切面的概念,实现了功能类与访问控制部分的分离,同时可以在容器内实现粗细粒度结合的访问控制,有很好的扩展性与松耦合性。在安全传输方面,本文采用非对称加密技术,客户端为了保证灵活性与通用性,不采用证书实现,而只在访问控制域与目标服务相对稳定的部分实现证书加密。在客户端,每次会话由客户端应用随机产生一个非对称密钥,在与访问控制域或目标服务域交互时将公钥加密后发送,之后访问控制域或目标服务域返回时用该公钥进行加密,确保消息只能被该客户端解密。