原文地址:http://www.cnblogs.com/chhuic/archive/2009/11/19/1606109.html
做項目時,經常會用到WebService來通訊,但WebService發布后為了能調用,一般都通過發布到IIS后調用 的。在IIS里可以通過匿名訪問,但這樣大家都可能訪問,不安全,因此可以提供操作系統分配一個帳號來登錄到IIS 。這只是對訪問服務器上的文件進行了限制,以前我也是采用這種方式,上次看到另 一種方法來防止 別人調用WebService,就是對方面進行加密,總結下來,對於WebService可以采用以下二個方法來有效防止別人調用:
第一、禁止匿名訪問,對WebService進行認證,這步主要是通過操作系統的安全機制來實現的,也就是只有滿足一定要求的帳號才能訪問到服務器,才能訪問IIS,這個可以通過訪問我以前的隨筆C#調用Web Service時的身份驗證 ,在這里有詳細的說明,在些不我說了;
第二、在第一種方法的基礎上對WebService里的方法進行加密,這里面方法很多,下面提供一種比較常用的方法。在調用方法時多提供二個參數用戶加密解密用(當然了提供幾個參數看自己的需要而定)。比如有個WebService方法是根據顧客ID獲取數據庫中的顧客的詳細資料為GetCustomerDetailByCustomerID(string custID);如果只提供一個參數,則很容易被別人訪問調用,從而顧客資料很容易被別人獲取,因此我們對這個方法進行加密GetCustomerDetailByCustomerID(string scustID,string custID,ecustID);這樣,只有提供正確的scustID與ecustID這二個參數才能成功調用這個方法,而對於這二個參數scustID與ecustID,則可以通過加密方法生成一個字符串,如scustID='C39134558',ecustID='C39223525',只有這二個參數滿足一定的條件時才算驗證通過,而對於參數來說,我們也可以提供一個驗證,如果scustID里的值C39134558,前面三位必須是C39,緊跟5位13455則相加后的值18進行位操作如,對值18加一個因子,如1,則出現以下的運行:(18+1)%11==8,這樣只有最后一位為8才算這個參數值是符合要求的,所以隨便輸入一個參數如:C39134556,則因為不符合要求,所以驗證不能通過。在這里即使二個參數scustID='C39134558',ecustID='C39223525'都對了,則還需要通過這二個參數的進一步的驗證才能算成功。至於這二個滿足什么要求,一種是可以采用現有的加密機制,也可以自己寫一個加密類來襪。 上面只是舉一個簡單的例子。
第三、利用SoapHeader