国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

企業應用的Web服務安全技術:框架(圖)

2019-11-18 12:22:51
字體:
來源:轉載
供稿:網友

  本文是討論如何在企業環境中實現和應用基于Web服務安全技術的安全保護方案系列文章的第2部分。在本系列的第1部分中回顧了現有的解決方案及其缺陷,并提出開發一個新的Web服務安全工具包的方案,此工具包可以解決其中部分缺陷(見第一部分)。本文將進一步介紹此Web服務安全工具包的框架(下載部分源代碼),并解釋工具包內Web服務安全的特性與java語言的面向對象特性之間的高層抽象映射關系。
  
  客戶端
  
  第一部分中工具包需求部分指出, 開發工具包的目的之一是簡化客戶在當前的開發環境下處理Web服務安全的工作。這些工作應該移至框架層, 以便框架層最終將這些工作代理到底層基礎設施——真正應該處理這些工作的地方。 因此,在討論工具包的結構以及工具包內實體與WSSE相關標準之間的關系前, 讓我們將工具包視為一個黑盒子, 從客戶的角度來體驗一下(如何使用工具包)。
  
  WsseHeaderToken wsseHeader = new WsseHeaderToken();
  // Add Timestamp element to the WSSE Header 添加時間戳元素
  TsToken ts = wsseHeader.AddTimestamp(60);
  // Sign the timestamp element with default certificate使用缺省證書對時間戳元素簽名
  WsToken[] sigTokens = new WsToken[] {ts};
  wsseHeader.AddSignature(sigTokens);
  // Encrypt the signature and body elements with default key 使用缺省的密鑰加密簽名及主體中元素
  WsTokenRef[] encTokens = new WsTokenRef[]
  { new DSigTokenRef(), new SoapBodyRef() };
  wsseHeader.AddEncryption(encTokens);
  wsseHeader.PRocessHeader();
  Element soap = wsseHeader.GetSoapEnvelope();
  
  這個簡單示例構造了一個包含時間戳子元素的Web服務安全(以下簡記為WSSE)頭部元素, 并從配置文件中獲取xml簽名提供者的信息, 使用相應XML簽名提供者工具對時間戳元素簽名, 進而使用配置的XML加密提供者對安全頭部中的簽名元素和時間戳元素進行加密。
  
  XML文件解析具有過程化的本質, 這將帶來處理WSSE XML信息的困難, 導致混亂復雜相互糾纏的代碼。 工具包中實現了復雜安全規范的代碼, 試圖將安全領域的過程化規則映射到面向對象領域的對應部分。 包中代表WSSE元素的類, 隔離了XML解析過程, 創建了處理XML代碼的面向對象的包裝器。
  
  工具包提供的WsseHeaderToken類, 對一些功能進行了便于使用的封裝, 這樣可以使得客戶與框架的復雜性隔離。 假如有必要, 客戶也可以在代碼內直接創建和訪問工具包內的其他類。 例如, 當現有幫助類未提供處理某種類型的元素的功能時, 可以創建相應的處理器對象進行處理, 并將處理結果添加到頭部安全信息中。 在下面代碼中使用一個示例處理器和示例標記, 演示了如何從WSSE信息頭部拷貝標記元素到另一個WSSE信息頭部
  
  // Reference and read WSSE header with null actor
  使用null操作器引用和讀取WSSE 頭部
  WsseHeaderRef ref = WsseHeaderRef.CreateFromFile(filename, null);
  WsseHeaderToken wsseHeader = ref.GetWsseHeader();
  // Reference a sample element in the retrieved header
  引用已讀取頭部包含的一個示例元素
  SampleTokenRef sampleRef = new SampleTokenRef(wsseHeader,"sample1");
  SampleToken sample = sampleRef.GetSampleToken();
  // Create a new WSSE header and add the element
  生成新的安全頭部信息并添加元素
  WsseHeaderToken wsseNew = new WsseHeaderToken();
  wsseNew.InsertToken(sample);
  // Add sample element's processing in the new WSSE header
  在生成的頭部中處理示例元素
  SampleProcessor sampleProcessor = new SampleProcessor();
  sampleProcessor.SetReplaceTokens(true);
  sampleProcessor.AddToken(sample);
  wsseNew.AddProcessor(sampleProcessor);
  wsseNew.ProcessHeader();
  Element soap = wsseNew.GetSoapEnvelope();
  
  框架
  
  框架的結構層次很大程度上可以對應到WSSE規范描述的XML定義塊上。工具包包含如下類型的對象:
  
  ·表示WSSE 頭部的XML元素,也可以由子元素合成組合元素(compiste)。假如擁有用于生成標記的充足信息,那么可以從頭開始構建WSSE標記, 又或已經從其他WSSE頭部提取出(如SAML斷言等)必要的XML元素, 那么可以通過封裝來創建。 WSSE標記在工具包內的基類分別為位于wsse.Toolkit.Tokens包內的WsToken類以及WsCompisteToken類
  
  ·標記對象的“指針”,通過它們可以對現有的安全標記進行尋址和讀取操作。更一般的作用是作為一種機制,方便客戶指向現有的XML元素并將XML元素轉化為標記對象。標記引用類層次的基類是位于wsse.Toolkit.Refs包內的WsTokenRef類
  
  ·標記處理器對象:表示工具包內的操作的對象,可以通過它們對WSSE頭部、頭部內任何子元素以及包含的SOAP信息進行操作?,F在的工具包內僅有2個處理器類,DsigProcessor類以及EncProcessor類, 通過它們可以在WSSE頭部中添加新的標記和(或者)改變已有標記。實際上,改動/添加標記的特性并不是處理器的必然需求,非改寫的處理器類型也是可能出現的。這樣的意圖在wsse.Toolkit.Processors包內的處理器類型接口ITokenProcessor中得到體現,它的函數簽名設計可以避免引入更多的標記類型。
  
  ·幫助類對象:wsse.Toolkit.Utils包內的許多幫助類,可以便于客戶進行配置信息處理,XML處理等任務,還有wsse.Toolkit.Saml包用于支持SAML操作;wsse.Toolkit.Directory包用于支持用戶目錄操作。所有這些工具類本身不表示WSSE頭部的任何部分,僅供工具包的其它組件使用。
  
  ·輔助包裝器對象:此類對象將標記對象和處理器對象封裝起來,組成WSSE安全頭部的構建器,同時強調標記所有權概念,增強標記處理功能。 現在工具包內。擴展的標記類WsseHeaderToken, 不僅實現了標記對象接口,同時定義了一些便利方法,可以實例化工具包中的類并添加這些對象到本身表示的標記對象中。當然,假如需要,客戶可以自由的直接操作工具包中的對象。
  
  需要提到的是,并不是所有對象都是立即可得的。它們會隨著工具包實現階段的不斷展開,在后續的文章中被依次介紹并添加到工具包中來(參見第一部分的結論部分)
  
  如下,圖1顯示了工具包框架中各種對象以及客戶間的關系。
  
 企業應用的Web服務安全技術:框架(圖)
  圖1. 工具包的操作

  
  為了更好的理解圖1,需要對工具包操作的幾個重點概念進行進一步的解釋:
  
  ·不是所有的標記元素都可以從現有XML元素生成。例如,重用現有時間戳元素(wsse.Toolkit.Tokens.Wss.TsToken標記)來構建新的標記,沒有什么實際意義——實際上,需要時應該從頭構建并相應添加新標記
  
  ·可從現有XML元素創建的標記類,具有唯一參數類型為org.w3c.dom.Element的構造函數,此構造函數會對輸入的XML數據進行淺層次的數據有效性驗證。所有情況下,必須正確地維護用于構建新標記XML元素的org.w3c.dom.Document對象,不合適的文檔對象會在添加元素時產生錯誤。標記類基類WsToken類、WsConpositeToken類以及幫助類WsTokenHelper具有處理XML文檔的功能。
  
  ·雖然標記引用類型也都是從基類wsse.Toolkit.Tokens.WsToken派生的,但是大多數引用類型的作用是引用現存的XML元素,不是作為本身可以被添加的元素。不過,在下面的WSSE映射部分會提到一些非凡的標記引用類型,除具有引用元素功能外,本身也可以作為被添加的元素。
  
  ·標記引用類型可以引用不同的安全信息頭部中的標記元素——此功能有助于在新的WSSE頭部中添加現有標記元素的功能的實現。標記引用類型甚至可以引用在安全處理過程的初期添加的當前不存在的元素, 比如前面代碼示例中加密簽名元素構成的元素。
  
  ·標記幫助類的責任是實例化標記類型對象和標記處理器對象,并將二者聯系起來處理,當然這需要適當的配置信息以及初始化工作。標記處理器類型的責任是操作標記幫助類的處理結果,比如在安全頭部中添加一個新產生的數字簽名元素。處理器接口的要約是僅對引用標記進行適當的處理,并不對此處理過程中產生的新標記進行任何操作。
  
  ·處理操作可以連接起來構成處理操作鏈。這樣,可以對多個安全頭部的入口簽名,然后對簽名加密, 如上面客戶處代碼示例。
  
  工具包提供了輕量的對象層次,處理每次客戶調用時,會實例化一些具有僅于自己上下文環境關聯的對象, 因此不必擔心并發問題。工具包中大多數類沒有提供同步化鎖,只有wsse.Toolkit.Utils.Xml.XmlFactory 類和 wsse.Toolkit.Utils.Config.ConfigHelper類除外,這兩個類提供了一些可以被多個線程共享的功能。對于配置的目錄服務和SAML服務實現提供者來說,由于工具包的所有運行客戶都訪問相同的提供者,它們的實現必須是線程安全的。
  
  WSSE映射
  
  現在,將要討論工具包內的組件是如何與WSSE規范規定的主要構建塊的映射關系。注重:WSSE 規范的第5部分對<wsse:Security>頭部塊是這樣定義的,“<wsse:Security>頭部塊以SOAP行動者或角色的形式存在,提供在在SOAP信息中添加針對特定接收者的安全相關信息的機制”, 這意味著, WSSE安全頭部是可以擴展的, 同時在所有可能使用此技術的應用中試圖使用它是不合適的。 因此,工具包框架僅對規范中規定的標記類型及其關系進行映射,同時可以在以后添加新的標記類型及其處理器。
  
 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 唐海县| 洛扎县| 黄山市| 保德县| 南汇区| 炎陵县| 当雄县| 化德县| 萨迦县| 高台县| 沐川县| 孟州市| 武平县| 昌邑市| 平乐县| 合水县| 麻栗坡县| 措美县| 洞口县| 乐平市| 新竹市| 阿勒泰市| 杭锦后旗| 崇仁县| 长汀县| 巴塘县| 茌平县| 增城市| 华池县| 长海县| 元江| 邵武市| 富民县| 东乡| 泗洪县| 关岭| 平凉市| 科技| 东乡族自治县| 黄陵县| 云阳县|