我有一个小难题,我有一个使用基于表单的身份验证的 asp.net 应用程序。在应用程序内部,我有一个检查 User.IsInRole("somerole") 的 Web 服务,自从用户登录后,它就可以很好地处理来自应用程序的 ajax 调用,并且 ajax 调用来自他登录的浏览器。
现在,我想让一个胖客户端调用 web 服务(初学者的 c# 控制台客户端),但无法弄清楚如何将凭据信息传递给它。
我已经考虑过执行以下操作但无济于事:
SomeWebService svc = new SomeWebService();
svc.Credentials = new NetworkCredential("formsusername","formspassword","");
String returnValue = svc.CallMyWebMethod();
有人能告诉我这个技巧吗? :-)
谢谢!
最佳答案
Forms Authentication 的工作原理是让客户端在每个请求中发送一个 Cookie。当客户端通过发送正确的凭据成功进行身份验证时,服务器会发出此 cookie。
因此,为了使用表单例份验证对用户进行身份验证,您需要在控制台应用程序中执行以下步骤:
- 向某个网页发送 HTTP POST 请求并传递用户名和密码。作为响应,网络服务器将为您提供您需要捕获的身份验证 cookie(
Set-Cookie
HTTP 响应 header )。这通常是您的日志页面。 调用您的网络服务时,您需要传递此 cookie(
Cookie
HTTP 请求 header )。为了随请求一起设置 cookie,您必须覆盖为您生成的客户端代理类上的GetWebRequest
方法:protected override WebRequest GetWebRequest(Uri uri) { var request = (HttpWebRequest)base.GetWebRequest(uri); request.CookieContainer.Add( new Cookie( ".ASPXAUTH", "THE VALUE YOU HAVE RETRIEVED WHEN YOU SEND YOUR FIRST LOGON REQUEST" ) ); return request; }
关于c# - Asp.net 表单例份验证 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11114353/