怎麼解決給XML Web services 客戶端加上安全憑據,從而實現調用安全的遠程web方法?
首先,有遠程web服務Service繼承自System.Web.Services.Protocols.SoapHttpClientProtocol。web
再者,步驟有三:
1,創建憑據NetworkCredential。
2,設置憑據Service.Credentials。
3,設置預身份驗證,這樣在已經創建的鏈接上再次調用方法時就會把憑據加上。代碼以下安全
NetworkCredential credential = new System.Net.NetworkCredential("username", "passw0rd");//憑據 CredentialCache credentialCache = new CredentialCache();//爲多個憑據提供存儲 credentialCache.Add(new Uri(Service.Url), "Basic", credential); Service.Credentials = credentialCache;//獲取或設置 XML Web services 客戶端身份驗證的安全憑據 Service.PreAuthenticate = true;//預身份驗證
最後,客戶端調用web方法Service.WebMethod()。服務器
發現的問題是web方法被調用了不少次才生效。經過網絡抓包工具,發現每次向遠程服務器發起post請求時http頭沒有加上憑據Authentication: basic 密文。
解決辦法是經過在Service內部重寫GetWebRequest方法,在調用基類方法獲得的WebRequest上添加一個head爲Authentication: basic 密文,從而實現每次發送post請求是加上憑據。缺點是密文被寫死,也不是自動生成的。
網絡