close
文章出處

 

                               Web Services的身份驗證

引言

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

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

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中實現。

   可以應用WebServiceSoap 頭實現。也就是說可以利用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端進行解密。加密和解密是另外一個話題,在這里不多假描述。

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


不含病毒。www.avast.com
arrow
arrow
    全站熱搜

    AutoPoster 發表在 痞客邦 留言(0) 人氣()