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端進行解密。加密和解密是另外一個話題,在這里不多假描述。
從性能方面來看,加密解密這個過程將會降低性能。所以一般可以折中考慮,只對于一些敏感的數據進行加密和解密,比如說密碼等。除非是一些高安全性的應用,這時就另當別論了。一 引言
二 實現身份驗證
三 進一步
不含病毒。www.avast.com |
留言列表