【IT168 技术文章】
为了便于管理,就要有策略储存库(policy repository)。这个管理工具可以为插入、修改及删除策略提供接口。它应当可以提供与请求者相关的所有策略,可以通过XML数据库获得策略。用于XML的简单API(SAX)解析器速度快、占用内存小,可以对XML数据进行解析。
WSS
WSS由结构化信息标准促进组织(OASIS)通过Web服务安全技术委员会开发而成,它定义了使用XML安全标准把数字签名和加密运用于SOAP文档的标准方法。WSS规定了如何保护在网络上传送的SOAP消息,包括验证、完整性保护和机密性。它没有规定如何实施访问控制,但提供了可用于这类控制的信息。WSS允许有选择地使用加密。譬如说,它允许应用防火墙检查未经加密的消息。
此外,WSS允许基础设施选择方面有更大的灵活性。它不但可以利用X.509技术,还可以利用Kerberos、SAML或者普通的用户名和口令。因为WSS在SOAP层操作,所以它可以连同消息一起在整个网络上传输,即使该消息被查询或者被保存,也会保留下来。
WSS使用W3C开发的XML签名语法和处理及XML加密两项标准。WSS的操作方式是,把名为security的XML元素插入到SOAP头里面。SOAP头包含了运用于该消息的验证、数字签名和加密方面的所有信息。它为接收方提供了对消息进行解密及验证所必不可少的信息。可以使用X.509证书、Kerberos票据、SAML声明或者其他方法来规定密钥和授权信息。
带有<security>元素的SOAP信封示例如下:
<S:Envelope>
<S:Header>
<wsse:Security S:mustUnderstand="1"
xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/07/secext">
<wsse:BinarySecurityToken EncodingType="wsse:Base64Binary">
MIIDQTCC4ZzO7tIgerPlaid1q ... [truncated]
</wsse:BinarySecurityToken>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
....XML Signature...
</ds:Signature>
</wsse:Security>
</S:Header>
<S:Body>
<m:OrderAircraft quantity="1" type="777" config="Atlantic"
xmlns:m="http://www.rdta.com/XMLDatabaseOrderSubmission"/>
</S:Body>
<S:Envelope>
Web服务安全会话语言是另一项有用的规范――它允许使用对称密钥在Web服务请求方和Web服务之间创建会话。Web服务安全会话规范好比SSL,也涉及对称密钥协商过程,以简化加密消息的传输。微软的Web Services Enhancement 2.0工具包里面就含有Web服务安全会话规范,但目前还没有Java实现方案。Web服务安全会话范围如今也是WS-SX的一部分。
SAML
XML安全声明标记语言(SAML)定义了共享安全声明(包括验证和授权声明)的XML词汇,能够实现单次登记以及第三方管理这些功能。它还定义了请求/响应协议定义和XML协议(SOAP)绑定。SAML规范定义了一般的声明框架,允许为声明赋予有效期限,并允许声明可以针对特定受众(避免有可能被人滥用)。声明与特定的“主题”或者命名实体联系起来。
SAML是一种标准方法,可以通过跨越领域界限的异构分布式系统,交换安全及相关的数据。授权和审查跟踪是大家熟悉的两项安全服务。在过去,大多数系统是基于这种假定而设计的:一个系统会拥有进行访问控制决策所需要的所有信息;所有消息会记录在审查跟踪里面。然而,大规模分布式系统总是由多家组织、使用多种产品共同组建而成的。因而,用户可能会由不同的认证中心使用不同的方法来加以验证。此外,不同的认证中心保留了有关用户特性和属性的不同信息。集中所有功能和信息根本就不切合实际。SAML提供了表示验证和用户属性的标准格式,并提供了请求及发送验证和用户属性的协议。
SAML规范负责定义:
表示验证和授权声明的词汇,允许表明验证和授权如何进行、何时进行的语句可以在多方之间传输。
请求响应协议,以传输SAML声明以及XML协议(SOAP)绑定。
惟一标识符(URN),用于不同的验证机制和授权操作。
数字签名如何与声明进行联系。
SAML Token Profile,它描述了SAML声明如何由<wsse:security>标头携带及引用、SAML声明如何结合XML签名语法和处理标准使用,从而把声明的语句(譬如claims语句)绑定到SOAP消息上。
XACML
虽然SAML为进行验证和授权声明、使用XML传输这些声明提供了机制,但还需要词汇来表示进行授权决策所需的规则。XML访问控制标记语言(XACML)就是专门为表示授权规则而开发的。
XACML是表示访问控制策略的语言。换句话说,它可以保护数据交换过程中的内容。访问控制列表(ACL)缺乏表示实际系统中往往需要的复杂策略这一功能。因而,访问控制策略往往嵌入在应用代码当中。这给改变策略、甚至发现哪些策略在执行增添了难度。
XACML能够使用几乎各种现有的信息,从而确定是否允许对某资源的访问。它也可以把额外操作(名为义务)与决策联系起来――譬如说,要求一旦过了某段时间,就销毁请求的数据。
XACML根据资源属性(包括资源内容)或者环境因素(譬如日期、时间或者位置)来进行决策。它还会把与请求有关的各方具有的属性考虑进来,譬如角色或者群组成员身份。这不但包括提出请求的那一方,还可能包括接收数据的那方或者请求中介。
XACML的典型使用场景(usage scenario)就是,某主体想对某个资源如文件系统或者Web服务器采取某种操作。该主体向该实体提交查询,以保护资源。该实体名为策略执行点(PEP)。PEP使用XACML请求语言生成请求。然后,PEP把该请求发送到策略决策点(PDP),它会检查请求、检索适用于该请求的策略(用SACML策略语言编写),然后根据评估策略的XACML规则,确定要不要授予访问权。这个响应(用XACML响应语言表示)返回给PEP,然后PEP允许或者拒绝请求方的访问。
XQuery和XML数据库实现SOA安全
安全标准和安全文档使用本文讨论的XML及各种XML标记语言来描述。XDMS是为SOA中的安全策略文档和安全消息添加持久性并进行查询的一种理想机制。如前面所述,XQuery可以用来从XML文档提取信息。XQuery基本上是一种函数式语言,它使用表达式作为装配查询的集中部分。每个查询可以描述成一组表达式,该表达式可以嵌套。这项主要特性使XQuery成为操纵XML处理的一种灵活、全面的方法。
为了有效地访问或者保存XML文档,你需要XDMS。支持XQuery的XDMS能够迅速而方便地从XML安全文档检索信息。XML数据库已趋于成熟,可随时提供XML内容搜索和存储功能。
譬如说,XDMS能够维护不同版本的安全策略文档,为策略变更提供审查跟踪。此外,也可以为XML安全消息和请求添加持久性,提供SOA中所有安全事务的审查跟踪。
联合身份管理实现SOA安全
据《联合身份管理应对电子商务挑战》的两位作者:Jason Rouault和John Worral声称:
“单单一家组织无法有效地自始至终管理或者控制电子商务计划,如果牵涉多个合作伙伴,更是如此。即便是在一家企业里面,不同的业务部门也往往管理着一系列各不相同的用户和资源。这就是为什么如今组织求助于联合身份管理,以应对电子商务方面的挑战。”
如果把这些想法运用于牵涉多个不同应用、它们彼此通过Web服务进行协作的典型的供应链使用实例,我们就会发现:要是没有联合身份管理,未授权和不可信的人员访问具有SOA功能的底层业务流程就会导致一片混乱――协作的目的也就无从谈起。
SAML等联合身份标准和自由联盟等组织可以为不同的系统及各自的安全基础设施创建封装器(wrapper),组成所谓的信任圈(a circle of trust)。这是向跨交易合作伙伴和业务应用系统发展业务关系所迈出的第一步。
SOA治理
随着实施的SOA规模扩大、变得更加成熟,治理对SOA的成功来说极为重要。SOA治理是指定义及执行组织策略和标准的方法。这些策略针对管理责任和依赖关系的业务需求,从而确保业务经营的连续性、降低成本。它们还有助于IT部门,因为可以定义对企业内部数量激增的服务进行控制的机制,并采纳不断出现的标准、促进互操作性。
如今,大多数组织已经落实了针对所有上述要求的策略。不过,这些策略可能人工执行,或者分散在诸多部门和应用的不同地方。我们需要的联合信息和策略管理应该是与SOA工件驻留在一起的XML元数据,从而有助于自动执行策略,而无须人工干预。这是确保快速、可靠、稳定地执行组织内部的SOA策略的惟一方法。
联合身份管理需要一些特性,以便组织安全地共享及联系信息。企业可能需要维护各自的数据储存库以及统一视图,以便了解交易合作伙伴之间交换的数据。联合策略管理包括:发布、管理、发现及治理组织策略。如果多个合作伙伴彼此进行联系,就必须跨多家企业联系及组合这些策略。
SOA治理的目的就是构建可靠、安全的基础设施。如果你只只在XML注册中心层面来提供策略执行功能,就不可能实现这目的。贵组织创建的SOA工件大部分在你与交易合作伙伴交换的文档里面。因此,你对这些数据必须要有细粒度的治理,才能真正保护贵企业的安全。正因为如此,你需要SOA储存库,不只是需要XML注册中心。
SOA储存库应当是治理所有SOA工件的集中点。但设想一下需要为数量众多的XML SOA元数据连同SOA数据添加持久性。只有搜索速度快、可扩展的SOA储存库提供企业数据的查询和管理功能,才能够适用于联合信息和策略管理。实现这一目标的非常好的办法就是,SOA储存库由本地XDMS和XQuery来驱动,提供快速度和扩展性,从而实现行之有效的SOA治理。
正如我们前面强调的那样,XQuery是一门灵活、功能强大的语言,用于XML数据检索和管理。如果结合本地XDMS,就可以获得高效、高性能的选择方案,可以使用传统的解析方法和关系数据库管理系统(RDBMS)SOA工件存储库,来处理XML数据的复杂而缓慢的中间层会话。
结论
我们可以通过本文发现,XML在描述SOA的重要安全标准方面起到了重要作用。应当通过XDMS来处理为XML数据添加持久性的工作,其中包括用XML描述的安全和组织策略及安全消息。虽然许多XML和SOA安全标准仍在发展当中,但XDMS能够现在就可以实施SOA安全标准;并且在标准不断发展的过程中,尽量减小带来的不利影响。譬如说,XQuery就可以用于解析及更新由XDMS添加持久性并加以管理的这些XML安全文档。此外,XDMS可以处理任何类型的XML数据,不需要事先知道XML模式的结构。事实证明,在处理来自安全方法各不相同的联合系统的XML消息和安全文档时,这项强大功能具有特别明显的优势。XDMS能够为这些不同文档添加持久性,而且与XQuery一起,转换及映射各种安全标准。
另外,XDMS提供了操纵、浏览、搜索、整合及聚集SOA中的企业数据的全面功能。因此,在XQuery帮助下的XDMS具有诸多吸引人的好处,可以保护SOA的安全。