簡體   English   中英

使用Windows應用程序中的表單身份驗證的ASP.NET Web服務

[英]ASP.NET web service using forms authentication from a windows app

我有一個可以通過Windows程序訪問的ASP.NET Web服務,但是現在我想保護Web服務的安全。 我可以使用表單身份驗證來保護Web服務。 如何從Windows窗體應用程序訪問受保護的Web服務?

盡管這不是正確的方法,但是從理論上講,tt可以按照您描述的方式使用表單身份驗證。 這可以通過以下任一方法來完成:

  1. 使用WebRequest將原始請求發送到Web服務。 這將涉及檢查響應,提取相關的表單身份驗證字段,然后將響應發送回並登錄用戶。這將生成一個cookie,您必須將該cookie與隨后對服務的每個后續響應一起發送
  2. 自己生成FormsAuhentication身份驗證cookie。 這很復雜,因為它涉及到在調用應用程序上同步機器密鑰,並人為地操縱發送到托管服務的機器的標頭。
  3. 在需要與Web服務進行交互的會話開始時,顯示供用戶登錄的表單身份驗證表單。 然后,您可以像選項(2)一樣,收集生成的cookie並將其顯示在HTTP標頭中給服務。

如您所見,這些方法非常復雜,從根本上來說,是使用表單身份驗證的一種黑客手段,而從沒有使用過。

Microsoft打算讓我們使用Windows身份驗證或SSL證書來保護對ASP.NET Web服務的訪問。 請參閱MSDN上的HTTP安全性和ASP.NET Web服務

如果您能夠使用WCF,那么還會出現一些其他選擇,包括在WCF的支持下將自定義身份驗證機制構建到SOAP中的能力。

在大多數情況下,保護Web服務是工作中最棘手的部分之一。 我看到的許多實時解決方案都是上述折衷方案。

看來答案是否定的。 表單身份驗證是一種基於cookie的機制,您的WinForms應用將無法保存和中繼cookie(如果沒有,請采取一些嚴肅的解決方法)。

當研究您的問題時,我寫了一個潛在的解決方法,嘗試使用NetworkCredential對象,但是沒有用。 還嘗試了.NET 4.0中的ClientCredentials

var ss = new MySecureWebService.MyServiceSoapClient();
ss.ClientCredentials.UserName.UserName = "abc";
ss.ClientCredentials.UserName.Password = "123";
string asmxReturn = ss.HelloWorld(); //exception returned here

調用Web方法時,控制台應用程序仍顯示有登錄html頁面。

其他建議

  • 如果您有Web服務的源代碼,則將其邏輯提取到其自己的程序集中。 在WinForms應用程序中引用該程序集,就像在調用Web服務一樣。

我了解您的目標是重用已部署的應用程序,但下一個最好的方法是通過.dll引用使用相同的邏輯/實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM