Web Services的身份驗證

  Web Services 的身份驗證

引言

   隨着 Web Service 的出現,其應用也是越來越廣,同時也深受開發者的喜愛。下面我將引用一個實際應用例子說明本文的目的。

   假設有一個網上購物系統 LiveShopping 。在 LiveShopping 上,當客戶已經選好他自己想買的商品之後,接下來就該付帳了。 LiveShopping 可以直接用信用卡付帳。另外假設 LiveShopping 的電子付款是與 VeriSign 合作。也就是說 LiveShopping VeriSign 的一個客戶。假設 VeriSign 提供了一些 Web Services LiveShopping 使用。假設這些方法是:

1)  VerifyCC(string cc_no,string expire_date,float amt)

2)  ProcessCC(string transaction_type, string cc_no,string expire_date,float amt,CardHolder holder)

  其中方法 1 驗證信用卡是否有效,方法 2 是一個 Transaction ,將從信用卡上劃出 amt 數額的交易款。

參數說明

cc_no 信用卡卡號碼

expire-date 有效日期

amt  金額

transaction_type 事務類型,比如說 sale force 等等

holder 持卡人信息

 

  這裏有個問題,如果 VeriSign 沒有身份驗證,那怎麼知道客戶是 LiveShopping 。換句話說,如果沒有身份驗證,每個人都可以使用這兩個方法。所以身份驗證必不可少。

實現身份驗證

   身份驗證有很多方法,這裏將介紹一種非常簡單的方法,並且在 .NET 中實現。

   可以應用 WebService Soap 頭實現。也就是說可以利用 Soap 頭傳遞驗證的信息,比如用戶名,密碼等等。

首先從客戶端看,可以對其應用有一個直觀的瞭解。代碼如下

  private void Button1_Click (object sender , System .EventArgs e )

              {

                     AuthHeader auth =new AuthHeader ();

                     WebServices webService =new WebServices ();

                     auth .UserName =this .txtName .Text .Trim ();

                     auth .Password =this .txtPwd .Text .Trim ();

                     webService .authHeader =auth ;

                  string rtStr =webService .GetPassword ();

                     this .txtReturn .Text =rtStr ;

}

   解釋一下, AuthHeader 爲前面提及的 Soap 頭的實現,其定義如下:

    public class AuthHeader :SoapHeader

       {

              public string UserName ;

              public string Password ;

       }

 

繼續看看 WebServices 是如何實現的,代碼如下:

       public class WebServices : System .Web .Services .WebService

       {

              public AuthHeader authHeader ;

              [SoapHeader ("authHeader")]

              [WebMethod ( Description ="This method will return the sensitive data")]

              public string GetPassword ()

              {

                     if (authHeader .UserName .Equals ("user") &&authHeader .Password .Equals ("pwd"))

                     {

                            return "pwd";

                     }

                     return "Invalid Authentication ";

              }

       }

可以發現,加入了一個 AuthHeader 公共成員。這個可以供調用者傳輸驗證信息。另外重要的一點是 SoapHeader 屬性,它明確了 Soap 頭。具體可以參見 MSDN

  GetPassword ()中,可以加入你的代碼。它第一步就是驗證信息,如果驗證成功,繼續完成你的事情,如果不成功,則退出。

進一步

  如果爲了使應用更加安全,我們可以對數據進行加密,比如說我們可以對驗證信息進行加密。可以在客戶端進行加密,然後到了 server 端進行解密。加密和解密是另外一個話題,在這裏不多假描述。

  從性能方面來看,加密解密這個過程將會降低性能。所以一般可以折中考慮,只對於一些敏感的數據進行加密和解密,比如說密碼等。除非是一些高安全性的應用,這時就另當別論了。

發佈了42 篇原創文章 · 獲贊 3 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章