如何从客户端应用程序发送Windows身份验证的客户端凭据,以确保用户不是匿名的

时间:2011-08-24 15:51:34

标签: windows-authentication

我有一个客户端应用程序试图向IIS7托管的Web应用程序发出请求。客户端需要发送其身份以参与Windows身份验证。这类似于IE使用Windows集成安全性发送用户凭据。我需要在C#.net客户端应用程序中使用相同的行为。

客户端使用WebRequest类发出请求:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri("http://webhost/resources/a"));
request.Method = method;
request.MaximumAutomaticRedirections = 10;
request.UseDefaultCredentials = true;

这似乎不起作用,因为在服务器上尝试使用以下代码进行模拟时:

WindowsIdentity windowsIdentity = (WindowsIdentity)HttpContext.Current.User.Identity;
using (windowsIdentity.Impersonate())
{
    // do stuff
}

发生异常:

2011-08-24 15:42:12,949 [63] ERROR - Error occurred responding to PUT request for http://webhost:1234/resources/a. System.InvalidOperationException: An anonymous identity cannot perform an impersonation.
   at System.Security.Principal.WindowsIdentity.Impersonate(StackCrawlMark& stackMark)
   at System.Security.Principal.WindowsIdentity.Impersonate()

不知何故,我需要确保将凭据发送到服务器,以便服务器不会将客户端视为匿名。我一直试图在服务器上禁用匿名身份验证,但这会引发另一个错误(这是另一个我不想进入此问题的问题;我已经发布了另一个问题)。

0 个答案:

没有答案