4

我有一个小难题,我有一个使用基于表单的身份验证的 asp.net 应用程序。在应用程序内部,我有一个 Web 服务,它检查 User.IsInRole("somerole") 自从用户登录以来,该服务与来自应用程序的 ajax 调用配合良好,而 ajax 调用来自他登录的浏览器。

现在,我想让胖客户端调用 webservices(初学者的 c# 控制台客户端),但不知道如何将凭证信息传递给它。

我已经考虑过执行以下操作但无济于事:

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

有谁能告诉我这个的诀窍吗?:-)

谢谢!

4

1 回答 1

2

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

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

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