国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
WSE3.0構(gòu)建Web服務(wù)安全(Web Services Enhancements 增強(qiáng))
繼《WCF分布式應(yīng)用程序開發(fā)必備知識(shí)》系列之后,經(jīng)過(guò)一周的時(shí)間,我準(zhǔn)備了關(guān)于如何使用WSE3.0進(jìn)行Web Service安全開發(fā)的文章--《WSE3.0構(gòu)建Web服務(wù)安全》,寫出來(lái)一起與大家分享?!禬CF分布式應(yīng)用程序開發(fā)必備知識(shí)系列》第4節(jié)Web服務(wù)已經(jīng)涉及到Web服務(wù)安全的問(wèn)題。這個(gè)系列仍是對(duì)以前技術(shù)的整理和學(xué)習(xí)的文章。我在整理的過(guò)程中也收獲很多,對(duì)整個(gè)WSE3.0的安全機(jī)制有的新的認(rèn)識(shí)。不管高手還是菜鳥,都希望你能從我的這個(gè)系列文章里有所收獲。那么我們就來(lái)一起學(xué)習(xí)這個(gè)系列文章的第一篇:WSE3.0安全機(jī)制與實(shí)例開發(fā)。全部文章分為5個(gè)部分:1.WSE3.0框架介紹2.安全基本概念 3.下載與安裝4.代碼實(shí)現(xiàn)與分析5.總結(jié)。網(wǎng)上很多參考的文章在介紹WSE安全開發(fā)的時(shí)候不夠系統(tǒng)。往往有文章沒(méi)代碼,或者有代碼但運(yùn)行不了。最后我還會(huì)照例放出文章的例子代碼。并包括詳細(xì)的注釋。   

     下面我們進(jìn)入今天的正式學(xué)習(xí)。

    【1】.WSE3.0框架介紹   

       WSE3.0全稱是  Web Services Enhancements 3.0。是微軟針對(duì)Web Service推出的安全實(shí)現(xiàn)平臺(tái),包括為了實(shí)現(xiàn)安全認(rèn)證和加密特定的類庫(kù)。WSE3.0的很多安全實(shí)現(xiàn)方式都能在WCF框架里找到影子。WebSerivice 2.0 支持 WS-I Basic Profile 1.1 和 SOAP 1.2。這意味著,它支持 XML 1.0、XML 架構(gòu)定義 (XSD)、Web 服務(wù)描述語(yǔ)言 (WSDL)、SOAP 1.1、SOAP 1.2 以及編譯時(shí)的基本配置文件一致性驗(yàn)證。WSE 3.0 通過(guò)提供對(duì)某些更高級(jí)的 WS-* 協(xié)議的支持,來(lái)補(bǔ)充 WebSerivice 2.0 的功能。

        因此我們通常會(huì)使用WSE 3.0增強(qiáng) WebSerivice安全。WSE3.0經(jīng)常使用的特性包括如下四個(gè)方面:

(1)基于消息的安全性 (WS-Security) :支持WS-* 協(xié)議

(2)高效的二進(jìn)制數(shù)據(jù)傳輸 (MTOM) :消息傳輸優(yōu)化機(jī)制Message Transmission Optimization Mechanism

(3)可選的宿主環(huán)境 (Host):多個(gè)宿主程序的實(shí)現(xiàn),IIS外托管的支持

(4)自定義聲明性策略管道(Policy):根據(jù)用戶需要自定義策略

     首先,WSE 3.0支持WS-* 協(xié)議。它是由IBM、Microsoft 和 Verisign 聯(lián)合發(fā)布,是關(guān)于 Web 服務(wù)安全性(Web Services Security,WS-Security)的規(guī)范,該規(guī)范提供了一套幫助 Web 服務(wù)開發(fā)者保護(hù) SOAP 消息交換的機(jī)制。這個(gè)規(guī)范已經(jīng)被 OASIS 所接受,并且新組建了 Web 服務(wù)技術(shù)委員會(huì)(Web Services Technical Committee,The WSS TC),以促使 WS-Security 成為開放標(biāo)準(zhǔn)。概念性協(xié)議棧規(guī)定了 Web 服務(wù)中構(gòu)建安全性非常重要的額外元素。路線圖中新增的三個(gè)部分,策略層中的兩個(gè)元素和聯(lián)合層中的一個(gè)元素(如圖 所示)

   

     各個(gè)層次的作用相輔相成。其中WS-Trust 通過(guò)定義一組接口開始了定義信任關(guān)系的工作,安全性令牌服務(wù)將為安全性令牌的發(fā)出、交換和驗(yàn)證提供這組接口。它旨在支持創(chuàng)建多種安全性令牌格式,以適應(yīng)各種認(rèn)證和授權(quán)機(jī)制。發(fā)出安全性令牌服務(wù)接受一個(gè)輸入請(qǐng)求(通常還有身份證明),然后以指定的身份所請(qǐng)求的令牌(即一個(gè)特定的業(yè)務(wù)證書)作為響應(yīng)。WS-Secure Conversantion 建立在以安全性令牌為基礎(chǔ)的信任這一概念之上。它描述了如何在策略定義的信任關(guān)系上下文中使用安全性令牌來(lái)使得多個(gè)服務(wù)請(qǐng)求者和服務(wù)提供者能在會(huì)話期間安全地交換信息。安全性空間內(nèi)的這種預(yù)期行為的描述也可以稱之為信任策略,WS-Policy 框架支持信任伙伴表達(dá)和交換他們的信任聲明。WS-Trust 定義了整個(gè)信任關(guān)系的行為,而 WS-SecureConversation 則著重定義了安全通信的安全性上下文(安全性令牌)。

  其次,基于消息的安全性和 消息傳輸優(yōu)化機(jī)制MTOM 是人們?cè)?Web Serivice項(xiàng)目中使用 WSE3.0 的兩個(gè)主要原因。另外WSE 3.0 通過(guò)Web Serivice提供的擴(kuò)展來(lái)封裝對(duì)Web Serivice調(diào)用。這使我們就能夠利用各種 WSE 3.0 功能。在實(shí)際開發(fā)中我們只需要WSE 3.0設(shè)置工具并選擇所需的選項(xiàng)。就可以完成對(duì)項(xiàng)目的特定設(shè)置。這些信息會(huì)保存帶配置文件里的對(duì)應(yīng)位置。

     再次,多宿主部署。使得我們可以靈活第部署和使用Web Service.而不是單單以來(lái)IIS來(lái)發(fā)布Web服務(wù)。WSE 3.0 使您能夠執(zhí)行 Web Serivice類型的自定義宿主。消息處理類 SOAPSender 和 SOAPReceiver 使您能夠?qū)崿F(xiàn)任何類型的高級(jí)消息處理模式。WSE 3.0 支持 HTTP 和 TCP協(xié)議。允許第三方插入自己的傳輸實(shí)現(xiàn)。

  最后,在 Web Serivice項(xiàng)目中啟用 WSE 3.0 的另一個(gè)原因是,要利用它的策略管道擴(kuò)展性模型。WSE 使您能夠插入對(duì)進(jìn)入和離開終結(jié)點(diǎn)的 SOAP 消息執(zhí)行預(yù)處理和后續(xù)處理的篩選器。該擴(kuò)展點(diǎn)比 WebSerivice SOAPExtension 框架更易于使用,因?yàn)樗峁┑墓δ芸梢詣?chuàng)建能夠與 WSE 提供的現(xiàn)有聲明性安全策略相結(jié)合的自定義聲明性策略。

     另外還可以使用其提供的 SOAP 消息診斷跟蹤功能。

    【2】.  安全基本概念

    介紹完WSE3.0的一些基本概念和特性。我們?cè)賮?lái)熟悉一下常見加密技術(shù)、密鑰和證書。

    (1)加密技術(shù),為什么要使用加密技術(shù),主要是為了實(shí)現(xiàn)一下目的:

    a) 機(jī)密性。確保數(shù)據(jù)的保密性。機(jī)密性通常是使用加密實(shí)現(xiàn)的??梢允褂眉用芩惴ǎㄊ褂眉用苊荑€)將明文轉(zhuǎn)換為密文,并使用相應(yīng)的解密算法將密文轉(zhuǎn)換回明文。對(duì)稱加密算法使用相同的密鑰進(jìn)行加密和解密,而非對(duì)稱算法則使用公鑰/私鑰對(duì)。
    b)數(shù)據(jù)完整性。確保數(shù)據(jù)免受意外或者故意(惡意)的修改。完整性通常是由消息身份驗(yàn)證代碼或哈希值提供的。哈希值是從數(shù)據(jù)序列導(dǎo)出的固定長(zhǎng)度的數(shù)值。哈希值用于驗(yàn)證通過(guò)非安全通道傳送的數(shù)據(jù)的完整性??梢詫⑹盏降臄?shù)據(jù)的哈希值與傳送時(shí)數(shù)據(jù)的哈希值進(jìn)行比較,以確定數(shù)據(jù)是否被篡改。
   c)身份驗(yàn)證。保證數(shù)據(jù)來(lái)自某一方。數(shù)字證書用于提供身份驗(yàn)證。數(shù)字簽名通常應(yīng)用于哈希值,因?yàn)檫@些值比它們所代表的源數(shù)據(jù)小得多。

   (2)密鑰和證書:
    非對(duì)稱加密使用公鑰/私鑰對(duì)。對(duì)于使用私鑰加密的數(shù)據(jù),只能使用相應(yīng)的公鑰進(jìn)行解密,反之亦然。(參考MSDN)

   (3)簡(jiǎn)單介紹一下常見的加密手段如下:

   

表 1: .NET Framework 為其提供現(xiàn)成實(shí)現(xiàn)類的算法。

對(duì)稱算法 非對(duì)稱算法 哈希算法

DES(數(shù)據(jù)加密標(biāo)準(zhǔn))

DSA(數(shù)字簽名算法)

HMAC SHA1(使用 SHA1 哈希算法且基于哈希的消息身份驗(yàn)證代碼)

TripleDES(三重?cái)?shù)據(jù)加密標(biāo)準(zhǔn))

RSA

MAC Triple DES(使用 Triple DES 的消息身份驗(yàn)證代碼)

Rijndael

 

MD5

RC2

 

SHA1、SHA256、SHA384、SHA512(使用各種哈希大小的安全哈希算法)

    a。私鑰加密算法:使用單個(gè)私鑰來(lái)加密和解密數(shù)據(jù)。由于具有密鑰的任意一方都可以使用該密鑰解密數(shù)據(jù)私鑰加密又稱為對(duì)稱加密,因?yàn)橥幻荑€既用于加密又用于解密。私鑰加密并不能實(shí)現(xiàn)數(shù)據(jù)完整性,即防止數(shù)據(jù)被更改;也無(wú)法完成對(duì)身份的驗(yàn)證,即確保數(shù)據(jù)發(fā)自特定的一方。.NET 提供以下實(shí)現(xiàn)類以提供對(duì)稱的密鑰加密算法:

DESCryptoServiceProvider

RC2CryptoServiceProvider

RijndaelManaged

TripleDESCryptoServiceProvider


    b.共鑰加密:公鑰加密使用一個(gè)必須對(duì)未經(jīng)授權(quán)的用戶保密的私鑰和一個(gè)可以對(duì)任何人公開的公鑰。公鑰和私鑰都在數(shù)學(xué)上相關(guān)聯(lián);用公鑰加密的數(shù)據(jù)只能用私鑰解密,而用私鑰簽名的數(shù)據(jù)只能用公鑰驗(yàn)證.NET 通過(guò)抽象基類 (System.Security.Crytography.AsymmetricAlgorithm) 提供下列非對(duì)稱(公鑰/私鑰)加密算法:

DSACryptoServiceProvider

RSACryptoServiceProvider


   c.哈希值:哈希算法將任意長(zhǎng)度的二進(jìn)制值映射為固定長(zhǎng)度的較小二進(jìn)制值,這個(gè)小的二進(jìn)制值稱為哈希值。哈希值是一段數(shù)據(jù)唯一且極其緊湊的數(shù)值表示形式。.NET Framework 提供以下實(shí)現(xiàn)數(shù)字簽名算法的類:

NET 提供了下列哈希算法:

SHA1、SHA256、SHA384、SHA512

MD5

HMACSHA(加密的哈希算法)

MACTripleDES(加密的哈希算法


    d.數(shù)字簽名:數(shù)字簽名驗(yàn)證發(fā)送方的標(biāo)識(shí)并保護(hù)數(shù)據(jù)的完整性。事實(shí)上數(shù)字簽名是基于以上各種加密技術(shù)組合的解決方案。一個(gè)基本的數(shù)字簽名方案可能有如下步驟:雙方各自生成一個(gè)公鑰/私鑰對(duì)。雙方交換他們的公鑰。雙方生成一個(gè)用于對(duì)稱加密法的私鑰,并使用該對(duì)稱私鑰加密要發(fā)送的消息。生成加密后消息的哈希值。用對(duì)方的共鑰加密對(duì)稱私鑰和哈希值(組合密文即為簽名),并將該簽名附加在消息主體的密文后發(fā)送給對(duì)方。

   以上知識(shí)簡(jiǎn)單的加密算法的簡(jiǎn)單介紹,具體大家可以查看相關(guān)的安全和加密方面的書籍資料。這里簡(jiǎn)單介紹是為了更好第理解WSE3.0的安全機(jī)制的實(shí)現(xiàn)。

    【3】.下載與安裝

       下面來(lái)介紹一下WSE 3.0的下載和安裝情況。

      (1)WSE 3.0下載地址。下載并安裝WSE 3.0,你可以選擇安裝Tools和Samples,開發(fā)環(huán)境選擇Visual Studio 2005插件方式,開發(fā)過(guò)程中配置Web服務(wù)WSE 3.0特性會(huì)比較方便。

      安裝如圖:

     

      一定要選擇插件方式,否則我們本地建立項(xiàng)目的時(shí)候看不到設(shè)置選擇下一步直到安裝完成。

     (2)Visual Studio 2005 緊密集成 
        可以直接添加web服務(wù)引用Add Web Reference/Update Web Reference
        可以進(jìn)行WSE3.0設(shè)置 WSE3.0Settings button 
     (3)單獨(dú)的工具( Tools) 
       Wse Wsdl生成工具WseWsdl3.exe 
       Wse配置工具WseConfigEditor3.exe 
       X509認(rèn)證管理工具X509Certificate3.exe

      這些工具都可以在安裝目錄下找到如圖:

   

 

   

 

 

 

 

    WSE 3.0只能和Visual Studio 2005集成安裝。Visual Studio 2008里包含了WCF框架類庫(kù),WCF 定位為新的 .NET Web 服務(wù)平臺(tái),該平臺(tái)能夠完全替代現(xiàn)在對(duì) WSE 所提供功能的需要。

    安裝完成以后我們新建Web 服務(wù)項(xiàng)目。可以在項(xiàng)目右鍵屬性里看到WSE 3.0設(shè)置,如圖:

      就表示W(wǎng)SE 3.0安裝成功并且可以在項(xiàng)目里使用。

     【4】.代碼實(shí)現(xiàn)與分析

     上面詳細(xì)講解了WSE的基本概念、基本加密算法和WSE3.0的安裝過(guò)程。下面我們來(lái)進(jìn)行具體的代碼是實(shí)現(xiàn)部分, 之前的《WCF分布式應(yīng)用程序開發(fā)必備知識(shí)系列》第4節(jié)Web服務(wù)已經(jīng)涉及到Web服務(wù)安全的問(wèn)題。當(dāng)時(shí)的實(shí)現(xiàn)機(jī)制略有不同,使用的是SOAPHeader傳遞用戶令牌,在服務(wù)斷進(jìn)行驗(yàn)證。今天我們使用的是WSE3.類庫(kù)里實(shí)現(xiàn)的類UserNameToken來(lái)進(jìn)行用戶名字和密碼的傳輸。項(xiàng)目主要還是包括3個(gè)部分。一個(gè)Web Service項(xiàng)目、一個(gè)UserNameToken類庫(kù)和測(cè)試的客戶端

    1)首先來(lái)看MyUsernameTokenManager的實(shí)現(xiàn),它繼承自UsernameTokenManager,而UsernameTokenManager繼承SecurityTokenManager,SecurityTokenManager繼承自接口ISecurityTokenManager。UsernameTokenManager其中比較重要的方法是:

        protected virtual string AuthenticateToken(UsernameToken token);

        此方法提供了驗(yàn)證互用令牌的具體實(shí)現(xiàn)
        public static WindowsPrincipal LogonUser(string username, string password);

        實(shí)現(xiàn)Window策略的驗(yàn)證用戶名和密碼
        protected virtual void VerifyHashedPassword(UsernameToken token, string authenticatedPassword);
       驗(yàn)證用戶的哈希密碼

        protected virtual void VerifyPassword(UsernameToken token, string authenticatedPassword);
        驗(yàn)證密碼的正確性

        protected virtual void VerifyPlainTextPassword(UsernameToken token, string authenticatedPassword);
       驗(yàn)證這個(gè)明文密碼的正確性

        public override void VerifyToken(SecurityToken token);

       最后以個(gè)是驗(yàn)證用戶令牌的包含的用戶名和密碼的有效性。

       其中最重要的是AuthenticateToken方法。WSE3.0框架會(huì)調(diào)用我們重寫的方法來(lái)驗(yàn)證從SoapHeader里提取生成的用戶令牌UsernameToken。

      下面我們給處具體的代碼:

 

Code

 

    在代碼中重載AuthenticateToken方法。服務(wù)端接收到含有UsernameToken實(shí)例的SOAP消息后,WSE將 UsernameToken反序列化,并調(diào)用VerifyToken方法,而VerifyToken方法在執(zhí)行過(guò)程中又會(huì)調(diào)用 AuthenticateToken方法,這個(gè)方法會(huì)返回一個(gè)口令值,WSE會(huì)拿它與UsernameToken中的口令進(jìn)行對(duì)比。

    2)服務(wù)端實(shí)現(xiàn)很簡(jiǎn)單,只包含一個(gè)方法,代碼如下:

 

Code

 

     3)客戶端代碼,主要是添加Web 引用。實(shí)例化Web服務(wù)的代理類,設(shè)置UserNameToken來(lái)調(diào)用web 服務(wù)的過(guò)程。

     

 

Code

    首先是創(chuàng)建Web service proxy的實(shí)例      ServiceWse serviceProxy = new ServiceWse();

    然后通過(guò)UsernameToken類的實(shí)例添加用戶名與口令。使用UsernameToken 設(shè)置用戶名和密碼  UsernameToken token = new UsernameToken("FrankXu", "123456789", PasswordOption.SendPlainText);

    最后 設(shè)置用戶令牌到服務(wù)代理 serviceProxy.SetClientCredential(token)

    調(diào)用服務(wù)方法  string result = serviceProxy.HelloWorld();

最后運(yùn)行結(jié)果如下:

   

   運(yùn)行結(jié)果顯示成功調(diào)用了服務(wù),并且輸出正確的結(jié)果。

   【5】.總結(jié)。

     以上是本節(jié)的全部?jī)?nèi)容:WSE3.0框架介紹、安全基本概念、下載與安裝、代碼實(shí)現(xiàn)與分析。這里值得注意的地方:(1)每個(gè)項(xiàng)目都要添加WSE3.0程序集Microsoft.Web.Services3的引用,不然項(xiàng)目會(huì)報(bào)錯(cuò)。最后我還會(huì)照例放出文章的(2)例子代碼比較簡(jiǎn)單。只是簡(jiǎn)單應(yīng)用了WSE3.0的基本機(jī)制。其實(shí)不難理解,WSE3.0的用戶密碼加密就是在客戶端設(shè)置用戶令牌的時(shí)候進(jìn)行。而服務(wù)端的AuthenticateToken方法里實(shí)現(xiàn)的其具體的密碼驗(yàn)證過(guò)程,包括具體的驗(yàn)證策略算法等扥,最終返回的就是客戶端成精傳遞的密碼。

  

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
博客園閃存首頁(yè)新隨筆聯(lián)系管理訂閱 隨筆- 2465 文章- 0 評(píng)論- 173 WCF與WebService的區(qū)別
Dubbo源碼解析——限流
接口認(rèn)證方式:Bearer Token
Web Service安全機(jī)制探討
如何在Vista中不彈出UAC以本地系統(tǒng)賬戶啟動(dòng)程序
應(yīng)用限流接入手冊(cè)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服