解决方法
确定HTTP身份验证是NTLM还是Kerberos
http://support.microsoft.com/kb/891032
[…]
“由于我们正在查看此跟踪以查看客户端是否正在发送身份验证信息,因此我们可以使用TCP段跟踪HTTP GET请求和来自服务器的响应.以下是来自框架的一个片段,用于从中发送身份验证信息客户:
23 4294967263.4294641621 LOCAL 00045A420DBC HTTP GET请求(来自使用端口3135的客户端)192.168.0.2 192.168.0.4 IP
HTTP:GET请求(来自使用端口3135的客户端)
HTTP:请求方法= GET
HTTP:统一资源标识符= /webapplication1/webform1.aspx
HTTP:协议版本= HTTP / 1.1
HTTP:Accept = image / gif,image / x-xbitmap,image / jpeg,image / pjpeg,application / vnd.
HTTP:Accept-Language = en-us
HTTP:Accept-Encoding = gzip,deflate
HTTP:User-Agent = Mozilla / 4.0(兼容; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR
HTTP:主机=外星人
HTTP:连接=保持活跃
HTTP:授权=谈判TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
44 77 3D 3D 0D 0A 0D 0A AAADw == ….
“这告诉我们什么?我们可以看到Authorization标头设置为”Negotiate“,我们可以看到在该标头中发送了一长串字符.这个响应告诉我们客户端和服务器正在协商NTLM连接.我们知道这里使用的是NTLM身份验证,因为第一个字符是’“T”.如果它是“Y”,它将是Kerberos.标题设置为“Negotiate”而不是“NTLM”.这不是意味着它将使用Kerberos或NTLM,但它将“协商”授权方法并首先尝试Kerberos如果能够.如果它不能使用Kerberos,它将使用NTLM.“
// if it is Negotiate... if (String.Compare(Request.ServerVariables["HTTP_AUTHORIZATION"].Substring(10,1),"Y",true) == 0) { // we are using Kerberos } else { // we are using NTLM }