【发布时间】:2010-04-03 16:08:16
【问题描述】:
我有一个可以通过 Windows 程序访问的 ASP.NET Web 服务,但现在我想保护该 Web 服务。我可以使用表单身份验证来保护 Web 服务。如何从 Windows 窗体应用程序访问受保护的 Web 服务?
【问题讨论】:
标签: asp.net
我有一个可以通过 Windows 程序访问的 ASP.NET Web 服务,但现在我想保护该 Web 服务。我可以使用表单身份验证来保护 Web 服务。如何从 Windows 窗体应用程序访问受保护的 Web 服务?
【问题讨论】:
标签: asp.net
虽然这不是正确的方法,但理论上可以按照您描述的方式使用表单身份验证。这可以通过以下任一方式完成:
如您所见,这些方法非常复杂,并且从根本上说是在从未打算使用表单身份验证的情况下使用的黑客攻击。
Microsoft 打算让我们使用 Windows 身份验证或 SSL 证书来保护对 ASP.NET Web 服务的访问。请参阅 MSDN 上的 HTTP Security and ASP.NET Web Services。
如果您能够使用 WCF,那么会出现更多选项,包括在 SOAP 中构建自定义身份验证机制的能力,以及 WCF 的一些支持。
在大多数情况下,保护 Web 服务是这项工作中最棘手的部分之一。我见过的许多现场解决方案都是上述的妥协方案。
【讨论】:
似乎答案是否定的。 Forms 身份验证是一种基于 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 页面。
其他建议
我了解您的目标是重用已部署的应用,但最好的办法是通过 .dll 引用使用相同的逻辑/实现。
【讨论】:
【讨论】: