Web 服务策略断言语言 (WS-PolicyAssertions)
版本 1.1
2003 年 5 月 28 日
作者
Don Box,Microsoft
Maryann Hondo,IBM
Chris Kaler,Microsoft
Hiroshi Maruyama,IBM
Anthony Nadalin(编辑),IBM
Nataraj Nagaratnam,IBM
Paul Patrick,BEA
Claus von Riegen,SAP
John Shewchuk,Microsoft
![*](http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/3squares.gif)
本页内容
![]() | 1. 简介 |
![]() | 2. 标志和术语 |
![]() | 3. 常规断言 |
![]() | 4. 安全性考虑事项 |
![]() | 5. 致谢 |
![]() | 6. 参考资料 |
![]() | 附录 I. 策略的 XPath 表达式 |
![]() | 附录 II.消息部分选择函数 |
版权声明
_ 2001、2002、2003 BEA Systems, Inc, International Business Machines Corporation, Microsoft Corporation, SAP AG。保留所有权利。
BEA、IBM、Microsoft 和 SAP(统称为“作者”)谨授予您通过任何介质复制和公开此 WS-PolicyAssertions 规范的权利,且不需要任何中间费用或特许权,前提是您在 WS-PolicyAssertions 规范的所有的完整或不完整副本中包含了以下内容:
• | 指向此处规范的链接或 URL |
• | WS-PolicyAssertion 规范中所注明的版权声明。 |
除了以上授予的版权许可证以外,作者没有以明示或暗示方式授予任何他们拥有或控制的知识产权(包括专利)。
此 WS-POLICYASSERTIONS 规范是“按原样”提供的,作者不作任何明示或暗示的陈述或担保,包括(但不限于)对其适销性、针对特殊目的的适用性、无侵权性以及所有权的担保;不担保 WS-POLICYASSERTIONS 规范内容适用于任何用途,也不担保这些内容的实施将不会侵犯任何第三方的专利、所有权、商标或其他权利。
作者将不对由于使用或分发 WS-POLICYASSERTIONS 规范产生的任何(或与之相关的)直接、间接、特殊、意外或其他损失负责。
WS-PolicyAssertions 规范在最终发布以前可能会发生变化,因此您在使用此规范的内容时必须注意不能完全依赖此规范的内容。
未获得事先明确的书面授权,不得以任何方式使用作者的名称和商标,包括与该规范或其内容相关的广告或宣传。WS-PolicyAssertions 规范中的版权权利任何时候都由作者保留。
没有以暗示、禁止反言或任何其他方式授予其他权利。
摘要
本文档指定了一组公共的、可以在策略中指定的消息策略断言。
可组合的 (Composable) 的结构
通过使用 XML、SOAP 和 WSDL 可扩展性模式,WS* 规范旨在通过互相组合来提供丰富的 Web 服务环境。WS-PolicyAssertions 本身不为 Web 服务提供协商解决方案。WS-PolicyAssertions 是一个构造块,它与其他 Web 服务和特定于应用程序的协议一起使用,以适应各种各样的策略交换模型。
状态
此 WS-PolicyAssertions 规范是首度公开的草拟版,仅作为查看和评估使用。BEA、IBM、Microsoft 和 SAP 希望在不久的将来能征得您的投稿和建议。无论怎样,BEA、IBM、Microsoft 和 SAP 不以任何方式就此规范做出担保或陈述。
目录
1. 简介
该规范定义了与 WS-Policy [WS-Policy] 一起使用的常规的、与消息处理相关的断言。
1.1 目标
WS-PolicyAssertions 的目标是提供初始的断言集,以满足 Web 服务应用程序的一些普通需求。
1.2 示例
以下示例描述了一个策略表达式:
001 <wsp:Policy xmlns:x="..."> 002 <wsp:All> 003 <wsp:TextEncoding wsp:Usage="wsp:Required" Encoding="iso-8859-5" /> 004 <wsp:SpecVersion wsp:Usage="wsp:Required" URI="http://schemas.xmlsoap.org/ws/2002/12/policy" /> 005 <wsp:ExactlyOne> 006 <wsp:Language wsp:Usage="wsp:Required" wsp:Preference="10" Language="da" /> 007 <wsp:Language wsp:Usage="wsp:Required" wsp:Preference="7" Language="en-gb" /> 008 <wsp:Language wsp:Usage="wsp:Required" wsp:Preference="1" Language="en" /> 009 </wsp:ExactlyOne> 010 </wsp:All> 011 </wsp:Policy>
在本示例中,我们描述了常规策略的表达式。行 3 表示进行文本编码的特定策略断言。
行 4 描述了对规范进行引用的断言。
5-9 行表示用来产生策略断言集的 <wsp:ExactlyOne> 策略运算符。即有效策略必须包含且仅包含一条所包含的断言(6-8 行)。
2. 标志和术语
这部分说明了在此规范中使用的词语、命名空间和术语。
2.1 词语约定
本文档中的关键字“必须 (MUST)”、“绝不可以 (MUST NOT)”、“需要的 (REQUIRED)”、“将 (SHALL)”、“将不 (SHALL NOT)”、“应该 (SHOULD)”、“不应该 (SHOULD NOT)”、“推荐的 (RECOMMENDED)”、“可以 (MAY)”和“可选的 (OPTIONAL)”将按 RFC 2119 中描述的进行解释。
命名空间 [XML-NS] URI(常规形式为 "some-URI")表示 RFC 2396 [RFC 2396] 中中定义的一些应用程序相关或上下文相关的 URI。
2.2 命名空间
实现此规范时“必须”使用到的 XML 命名空间 URI 是:
http://schemas.xmlsoap.org/ws/2002/12/policy
用于 WS-PolicyAssertions 构造的 XML 方案的标准化副本可以通过解析 URI “http://schemas.xmlsoap.org/ws/2002/12/policy” 来获得。
本文档使用了以下命名空间:
前缀 | 命名空间 |
S | |
xsd | |
wsse | |
wsp | |
wsu |
2.3 方案文件
此规范的 XML 方案 [OK] 可能位于:
http://schemas.xmlsoap.org/ws/2002/12/policy
(还请参阅附录 III)。
在此文档中,引用被指向实用工具方案 (http://schemas.xmlsoap.org/ws/2002/07/utility) 中的 wsu:Id 属性和 <wsu:Created> 及 <wsu:Expires> 元素。wsu:Id 属性、<wsu:Created> 和 <wsu:Expires> 元素被添加至实用工具方案中,目的是使其他需要类似 ID 或时间戳的规范可以引用它(如此处一样)。
2.4 术语
我们介绍了本文档中用到的以下术语:
策略 (Policy) —策略是一组特定于域名的策略断言。
策略断言 (Policy Assertion) — 策略断言 表示单独的首选项、需求、功能或其他属性。
3. 常规断言
本部分描述了一组可以在策略表达式中使用的策略断言。除非特别注明,否则这些断言可以同时被 Web 服务和客户端使用。
WS-Policy [WS-Policy] 识别有效策略表达式的特性。例如,必须为断言指定用法。当此处识别的断言与其他断言组合时,必须遵从在 WS-Policy 中定义的规则。
3.1 TextEncoding 断言
Web 服务可以支持多个编码文本数据的字符集(包括 XML 1.0)。例如,ISO-8859-1、ISO-8859-5 或 UTF-8。在这种情况下,需要一种机制来表明支持哪种字符编码。<wsp:TextEncoding> 元素用来表明这一点。
该元素使用 XML 1.0(EncName 产品)4.3.3 节中描述的语法。
<wsp:TextEncoding> 的方案大致如下:
<wsp:TextEncoding Encoding="..." wsp:Usage="..."? wsp:Preference="..."? > ... </wsp:TextEncoding>
下面描述了以上概述方案中列出的属性和标记:
/TextEncoding
它表明支持的字符集。
/TextEncoding/@Encoding
该值按 XML 1.0 版本2 [XML] 中 4.3.3 节的定义进行指定。
/TextEncoding/@wsp:Usage
该属性表明每个 WS-Policy [WS-Policy] 中此断言的用法(如必需的、可选的等)。
/TextEncoding/@wsp:Preference
此属性指定了该特定选择的首选项。首选项表示为一个 xsd:int [XMLSchema2]。首选项的值越高,则表示的首选项权重就越大。如果没有指定首选项,则假定其值为 "0"。
/TextEncoding/{any}
可以指定其他的子元素,但它们“绝不可以”与其父元素的语义冲突;如果元素没有被识别,则“应该”忽略它。
/TextEncoding/@{any}
可以指定其他的属性,但它们“绝不可以”与其所有者元素的语义冲突;如果属性没有被识别,则“应该”忽略它。
以下示例描述了该声明的使用:
<wsp:TextEncoding wsp:Usage="wsp:Required" Encoding="iso-8859-5" />
3.2 语言断言
Web 服务可以允许在消息内容中使用可选择的自然语言。因此,Web 服务就有必要表明其支持和首选的语言。<wsp:Language> 元素就是用来执行该操作的。
需要注意的是,<wsp:Language> 元素的使用范围与 XML 1.0 版本 2 [XML] 规范中定义的 xml:lang 属性相符。希望其他规范将会解决有关分布式系统中国际化首选项和功能的问题。
<wsp:Language> 的方案大致如下:
<wsp:Language wsp:Usage="..."? wsp:Preference="..."? Language="..." > ... </wsp:Language>
下面描述了以上概述方案中列出的属性和标记:
/Language
它表明支持的语言。
/Language/@Language
该语言值按 XML 1.0 版本2 [XML] 中 2.12 节的定义进行指定。
/Language/@wsp:Usage
该属性表明每个 WS-Policy [WS-Policy] 中此断言的用法(如必需的、可选的等)。
/Language/@wsp:Preference
此可选属性指定了该特定选择的首选项。此首选项表示为一个 xsd:int [XMLSchema2]。此首选项的值越高,则表示的首选项权重就越大。如果没有指定首选项,则假定其值为 "0"。
/Language/{any}
可以指定其他的子元素,但它们“绝不可以”与其父元素有语义冲突;如果元素没有被识别,则“应该”忽略它。
/Language/@{any}
可以指定其他的属性,但它们“绝不可以”与其所有者元素有语义冲突;如果属性没有被识别,则“应该”忽略它。
以下示例描述了该声明的使用:此示例表明策略首选丹麦语,但接受英国英语或其他种类的英语。
<wsp:ExactlyOne> <wsp:Language wsp:Usage="wsp:Required" wsp:Preference="10" Language="da" /> <wsp:Language wsp:Usage="wsp:Required" wsp:Preference="7" Language="en-gb" /> <wsp:Language wsp:Usage="wsp:Required" wsp:Preference="1" Language="en" /> </wsp:ExactlyOne>
3.3 SpecVersion 断言
随着时间的推移,不同的规范将被修订。因此,Web 服务可能支持同一规范的不同版本。有些情况下,规范将会向后兼容;有些情况下则不会。因此,Web 服务需要一种方法来表明它们支持哪些规范,以及那些规范的哪些版本。<wsp:SpecVersion> 元素用来表明这一点。
<wsp:SpecVersion> 的方案大致如下:
<wsp:SpecVersion wsp:Usage="..."? URI="..." wsp:Preference="..."? > </wsp:SpecVersion>
下面描述了以上概述方案中列出的属性和标记:
/SpecVersion
它表明对某一规范的某一特定版本的遵从性。(遵从性是由引用的规范定义的)。可能会有多个规范元素来表明对该规范多个版本的遵从性。
/SpecVersion/@wsp:Usage
该属性表明每个 WS-Policy [WS-Policy] 中此断言的用法(如必需的、可选的等)。
/SpecVersion/@wsp:Preference
此可选属性指定了特定选择的首选项。首选项表示为一个 xsd:int [XMLSchema2]。首选项的值越高,则表示的首选项权重就越大。如果没有指定首选项,则假定其值为 "0"。
/SpecVersion/@URI
这是规范的 URI;此 URI“应该”使用由创建规范的企业设计的规范 URI 来引用规范的特定版本。例如:WC3 SOAP/1.1 规范 [SOAP11] 通过 URI "http://www.w3.org/TR/2000/NOTE-SOAP-20000508/" 进行标识。2002 年 6 月的 SOAP/1.2 [SOAP12] 工作草案通过 URI "http://www.w3.org/TR/2002/WD-soap12-part1-20020626/" 进行标识。
/SpecVersion/{any}
可以指定其他的子元素,但它们“绝不可以”与其父元素有语义冲突;如果元素没有被识别,则“应该”忽略它。
/SpecVersion/@{any}
可以指定其他的属性,但它们“绝不可以”与其所有者元素有语义冲突;如果属性没有被识别,则“应该”忽略它。
以下示例描述了该声明的使用:
<wsp:SpecVersion wsp:Usage="wsp:Required" URI="http://schemas.xmlsoap.org/ws/2002/12/policy" />
有些情况下,一个规范具有多个部分,而且仅仅指定此规范的版本是不够的。在这种情况下,规范在其方案中将不同的支持类别描述为元素。这些标记(适当的)可以在 <SpecVersion> 元素中进行指定。以下示例描述了对 "framitz" 规范(其方案标识日期为 2001 年 12 月)中 "part 1" 的支持。
<wsp:SpecVersion xmlns=".../utility" wsp:Usage="wsp:Required" URI="http://www.fabrikam123.com/2001/12/framitz"> <f:part1 xmlns:f="..." /> </wsp:SpecVersion>
3.4 MessagePredicate 断言
在本部分,我们提供一个策略断言,它可以用来确保消息遵从某个给定的谓词(先决条件)。例如,某些消息部分对于每个规范可能都是可选的,但对于某个特定实现却是必需的。<wsp:MessagePredicate> 元素用来表明这一点。
该元素的方案大致如下:
<wsp:MessagePredicate wsp:Usage="..."? Dialect="..."? > ... </wsp:MessagePredicate>
下面描述了以上概述方案中列出的属性和元素:
/MessagePredicate
该元素的内容(xsd:string 类型 [XMLSchema2])指定了一个必须将所有遵从的消息都求值为“真”的谓词表达式。此表达式的求值取决于可选的方言属性。默认的方言是 "http://www.w3.org/TR/1999/REC-xpath-19991116",它表明其表达式是一个 XPath 1.0 表达式 [XPATH]。如果存在多个指定的 <MessagePredicate> 元素,则所有的元素都必须是“真”,除非它们包含在一个选择策略元素中。(请参阅 WS-Policy [WS-Policy])。如果目标的选择可以很方便地使用 "http://schemas.xmlsoap.org/2002/12/wsse#part" 方言表示,则“推荐”使用它。否则,“推荐”使用使用附录 I 中定义的函数的常规 XPath 表达式。
/MessagePredicate/@wsp:Usage
该属性表明每个 WS-Policy 中此断言的用法(如必需的、可选的等)。
/MessagePredicate/@Dialect
此可选属性将使用中的表达式方言标识为 URI。如果属性不存在,则假定为 XPath 1.0。
URI | 含义 |
http://www.w3.org/TR/1999/REC-xpath-19991116 (默认) | <MessagePredicate> 元素的内容是一个 XPath 1.0 表达式。XPath 表达式对 S:Envelope 元素节点进行求值,以确定结果是“真”还是“假”。此表达式“应该”使用附录 I 中定义的函数(在合适的地方)。 |
<wsp:MessagePredicate> 元素内容是一个所需消息部分的列表,这些消息部分是使用附录 II 中定义的一组预定义函数进行标识的。此消息部分列表对 S:Envelope 元素节点进行求值,以确定结果是“真”还是“假”;如果所有指定的函数都非空,则该表达式为“真”。 |
/MessagePredicate/@{any}
可以指定其他的属性,但它们“绝不可以”与其所有者元素有语义冲突;如果属性没有被识别,则“应该”忽略它。
以下示例描述了该声明的使用:在此示例中,断言应用的消息必须正好包含一个 WS-Security [WS-Security] <Security> 头元素。
<wsp:MessagePredicate wsp:Usage="wsp:Required"> count(wsp:GetHeader(.)/wsse:Security) = 1 </wsp:MessagePredicate>
4. 安全性考虑事项
强烈“推荐”对策略和断言进行签名,以防止被篡改。
推荐:“不应该”接受此策略,除非它们已签名,并且有一个相关的安全令牌来指定签名者对给定的策略进行了正确的声明。也即依赖方不应该依赖于某个策略,除非该策略已签名并被提供了足够的声明来传递依赖方接受标准。
应该注意的是,本文档中描述的机制应该作为 SOAP 消息的一部分使用 WS-Security [WS-Security] 进行保护,或者使用特定于对象的安全性机制嵌入到其他对象中。
5. 致谢
我们衷心感谢以下人员为此规范所做的贡献:
Debasish Banerjee,IBM
Erik Christensen,Microsoft
Francisco Curbera,IBM
Giovanni Della-Libera,Microsoft
Scott Konersmann,Microsoft
Frank Leymann,IBM
Steve Lucco,Microsoft
Hiroshi Maruyama,IBM
Steve Millet,Microsoft
Henrik Frystyk Nielsen,Microsoft
Keith Stobie,Microsoft
Tony Storey,IBM
Kent Tamura,IBM
Sanjiva Weerawarana,IBM
6. 参考资料
[RFC 2119]
"Key words for use in RFCs to Indicate Requirement Levels",RFC 2119,S. Bradner (编辑),1997 年 3 月。
[RFC 2396]
T. Berners-Lee、R. Fielding 和 L. Masinter,"Uniform Resource Identifiers (URI):Generic Syntax",RFC 2396,MIT/LCS、U.C. Irvine 和 Xerox Corporation,1998 年 8 月。
[SOAP11]
"SOAP:Simple Object Access Protocol 1.1",W3C 纪要,Don Box、David Ehnebuske、Gopal Kakivaya、Andrew Layman、Noah Mendelsohn、Henrik Frystyk Nielsen、Satish Thatte 和 Dave Winer,2000 年 5 月 8 日。
[SOAP12]
"SOAP Version 1.2 Part 1:Messaging Framework",W3C 候选推荐,Martin Gudgin、Marc Hadley、Noah Mendelsohn、Jean-Jacques Moreau 和 Henrik Frystyk Nielsen (均为编辑),2002 年 12 月 19 日。
[WSDL]
"Web Services Description Language",IBM、Microsoft,2001 年 3 月 15 日。
[WS-Policy]
"Web Services Policy Framework (WS-Policy)",Don Box、Francisco Curbera、Maryann Hondo(编辑)、Chris Kaler(编辑)、Dave Langworthy、Anthony Nadalin、Nataraj Nagaratnam、Mark Nottingham、Claus von Riegen 和 John Shewchuk,2003 年 3 月。
[WS-Security]
"Web Services Security (WS-Security)",Bob Atkinson、Giovanni Della-Libera、Satoshi Hada、Maryann Hondo、Phillip Hallam-Baker、Chris Kaler(编辑)、Johannes Klein、Brian LaMacchia、Paul Leach、John Manferdelli、Hiroshi Maruyama、Anthony Nadalin、Nataraj Nagaratnam、Hemma Prafullchandra、John Shewchuk 和 Dan Simon,2002 年 4 月 5 日。
[XML]
"Extensible Markup Language (XML) 1.0 (Second Edition",W3C 推荐,Tim Bray、Jean Paoli、C. M. Sperberg-McQueen 和 Eve Maler(均为编辑),2000 年 10 月 6 日。
[XML-NS]
"Namespaces in XML", W3C 推荐,Tim Bray、Dave Hollander 和 Andrew Layman(均为编辑),1999 年 1 月 14 日。
[XPATH]
"XML Path Language (XPath) Version 1.0",W3C 推荐,James Clark 和 Steve DeRose(均为编辑),1999 年 11 月 16 日。
[XMLSchema1]
"XML Schema Part 1:Structures",W3C 推荐,Henry S. Thompson、David Beech、Murray Maloney 和 Noah Mendelsohn (均为编辑),2001 年 5 月 2 日。
[XMLSchema2]
"XML Schema Part 2:Datatypes", W3C 推荐,Paul V. Biron 和 Ashok Malhotra (均为编辑),2001 年 5 月 2 日。
附录 I. 策略的 XPath 表达式
此部分定义了一组使用 XPath [XPATH] 的标准化函数,以简化可以在断言中用来引用消息元素的路径表达式。
将 XPath 表达式的求值上下文 (evaluation context) 定义为包含 SOAP 信封 (SOAP envelope) 的文档。断言元素处使用的命名空间包含自动为 XPath 表达式上下文定义的 XPath 表达式。我们没有定义所有的变量,但的确定义了下面描述的函数(在 SOAP 1.1 [SOAP11] 和 SOAP 1.2 [SOAP12] 上都能实现)。
wsp:GetBody (节点) | 该函数从指定的 Envelope 元素返回 SOAP 信封 <S:Body> 元素。 |
wsp:IsInBody(节点) | 如果指定的节点在 SOAP 信封 <S:Body> 元素中,则该函数从指定的 Envelope 元素返回“真”。 |
wsp:GetHeader(节点) | 该函数从指定的 Envelope 元素返回 SOAP 信封 <S:Header> 元素。 |
wsp:IsInHeader(节点) | 如果指定的节点在 SOAP 信封 <S:Header> 元素中,则该函数从指定的 Envelope 元素返回“真”。 |
wsp:RoleURIForHeaderBlock(节点) | 该函数返回指定头块的 SOAP 角色。 |
wsp:IsMandatoryHeaderBlock(节点) | 该函数根据指定的头块是否是强制的 (mustUnderstand = true) 返回“真”或“假”。 |
wsp:IsRoleURIForNext(节点,字符串) | 该函数根据指定的角色是否映射到由所提供消息使用的 SOAP 版本预定义的“下一个 (next)”角色来返回“真”或“假”。 |
wsp:IsRoleURIForUltimateReceiver(节点、字符串) | 该函数根据指定的角色是否映射到由所提供消息使用的 SOAP 版本预定义的“最终接收者 (ultimate receiver)”来返回“真”或“假”。 |
wsp:GetNodesetForNode(节点) | 该函数返回节点的 XPath 节点集(包括节点、其属性、其所有派生节点及这些派生节点的属性)。 |
附录 II.消息部分选择函数
这一部分定义了一组函数;可以将这些函数与 方言一起使用来选择一个消息的某些部分。
wsp:Body() | 该函数标识消息的“正文”。 |
wsp:Header(x) | 该函数标识名称为特定 QName 的“头”。 |