HttpWebResponse - 如何设置NTLM身份验证标头

时间:2011-09-05 12:19:54

标签: c# authentication ntlm httpwebresponse httplistener

我必须通过单个服务器(受防火墙保护)访问外部服务(Web应用程序),因此我必须通过一个小型C#服务应用程序中继/隧道传输HTTP请求。

我编写了一个HttpListener,等待请求,调用外部Web服务器,得到他的响应并将其写入客户端。这部分应用程序运行顺畅。

出于审计目的,我在监听器上启用了NTLM身份验证,以便我可以记录哪些用户访问了此服务。到目前为止一切都很好。

listener.AuthenticationSchemes = AuthenticationSchemes.Ntlm;

身份验证有效,客户端自动获取带有WWW-“Authenticate:NTLM”标头的HTTP 401响应,客户端使用NTLM-Authorization标头重新发出请求,服务器响应挑战,客户端响应挑战 - >客户端已通过身份验证,我可以访问HttpListenerContext中的Identity属性。

但我认为,当我将回复写回客户端时,我犯了一个错误。当同一个客户端发出另一个请求时,他必须从头开始执行整个身份验证过程。

response.StatusCode = (Int32)((HttpWebResponse)remoteResponse).StatusCode;
foreach (var h in remoteResponse.Headers.AllKeys) {
  if (!(new string[] { "Content-Type", "Content-Length" }).Contains(h)) {
    response.AddHeader(h, response.Headers[h]);
  }
}
// Am I missing a Header here???
response.ContentType = remoteResponse.ContentType;

using (Stream input = remoteResponse.GetResponseStream()) {
  using (Stream output = response.OutputStream) {
    input.CopyTo(output);
  }
}

在观察与我识别的IIS网站的通信后,IIS通过“WWW.Authenticate”标头+值响应正常请求。我从哪里获得这个价值?感谢您的帮助,或任何提示查找更多信息的提示。

0 个答案:

没有答案