Asp.net形成经过身份验证的Web服务

时间:2012-06-20 06:57:42

标签: c# .net

我有一个小难题,我有一个使用基于表单的身份验证的asp.net应用程序。在应用程序内部,我有一个检查User.IsInRole(“somerole”)的web服务,它可以很好地处理来自应用程序的ajax调用,因为用户已登录,并且ajax调用来自他登录的浏览器。

现在,我想让胖客户端调用webservices(c#console client for starters),但是无法弄清楚如何将凭证信息传递给它。

我看过像下面这样的事情无济于事:

SomeWebService svc = new SomeWebService();
svc.Credentials = new NetworkCredential("formsusername","formspassword","");
String returnValue = svc.CallMyWebMethod();

那里的任何人都可以向我展示这个诀窍吗? : - )

谢谢!

1 个答案:

答案 0 :(得分:2)

表单身份验证的工作原理是让客户端在每个请求中发送Cookie。当客户端通过发送正确的凭据成功进行身份验证时,服务器会发出此cookie。

以下是您在控制台应用程序中需要执行的步骤,以便使用表单身份验证对用户进行身份验证:

  1. 将HTTP POST请求发送到通过用户名和密码的某个网页。作为响应,Web服务器将为您提供需要捕获的身份验证cookie(Set-Cookie HTTP响应头)。这通常是你的日志页面。
  2. 调用您的Web服务时,您需要传递此cookie(Cookie HTTP请求标头)。为了设置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;
    }