Web 服务策略断言语言 (WS-PolicyAssertions)
Web 服務策略斷言語言 (WS-PolicyAssertions)
發布日期: 4/26/2004 | 更新日期: 4/26/2004版本 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
本頁內容
| 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 | http://www.w3.org/2002/06/soap-envelope |
| xsd | http://www.w3.org/2001/XMLSchema |
| wsse | http://schemas.xmlsoap.org/ws/2002/12/secext |
| wsp | http://schemas.xmlsoap.org/ws/2002/12/policy |
| wsu | ttp://schemas.xmlsoap.org/ws/2002/07/utility |
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 中定義的函數(在合適的地方)。 |
| http://schemas.xmlsoap.org/2002/12/wsse#part | <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 的“頭”。 |
跳轉到原英文頁面
| 返回頁首 |
轉載于:https://www.cnblogs.com/Daview/archive/2004/04/28/7932.html
總結
以上是生活随笔為你收集整理的Web 服务策略断言语言 (WS-PolicyAssertions)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 00003-回文数的判定-leetcod
- 下一篇: mybatis学习笔记-03-CRUD操