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