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

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

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

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

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

谁能在那里向我展示这个诀窍? 🙂

谢谢!

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

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

>向一些传递用户名和密码的网页发送HTTP POST请求.作为响应,Web服务器将为您提供需要捕获的身份验证cookie(Set-Cookie HTTP响应头).这通常是你的日志页面.
>调用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;
}
点赞