Answers:
从:
确定HTTP身份验证是NTLM还是Kerberos
http://support.microsoft.com/kb/891032
[...]“由于我们正在查看此跟踪以查看客户端是否正在发送身份验证信息,因此我们可以使用TCP段来跟踪HTTP GET请求和来自服务器的响应。这是该帧的摘录从客户端发送身份验证信息:
23 4294967263.4294641621本地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:接受= image / gif,image / x-xbitmap,image / jpeg,image / pjpeg,application / vnd。HTTP:接受语言=启用HTTP:接受编码= gzip,缩小HTTP:用户代理= Mozilla / 4.0(兼容; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR HTTP:主机=外来HTTP:连接=保持活动状态的HTTP:授权=协商TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAFASgKAAAA 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
}
使用以下html / asp页中的代码:
<%
authType=UCase(Request.ServerVariables("AUTH_TYPE"))
authHeader=Request.ServerVariables("HTTP_AUTHORIZATION")
response.write " Authentication Method : " & authType & "<BR>"
LenAuthHeader = len(authHeader)
response.write " Protocol : "
if Len(authType ) =0 then response.write " Anonymous" else if authType<>"NEGOTIATE" then response.write authType else if LenAuthHeader>1000 then response.write "Kerberos" else response.write "NTLM"
%>
在HTTP请求标头(您可以从Firebug,Chrome Dev Tool或Fiddler中看到它)中,如果使用NTLM,则会看到类似的内容
授权:NTLM = TlRMTVNTGD6XAAAAGAAYAG425qAAYABgAhgAAAAAAAABIAAAADAAAAggAOAEgAAAAYABgAVgAAAAAAAACeAAAABYKIogUBKAoAAAAPcwBpAG0AcABsAGkAcABOADMAUgBXAEsAVwBBAEwAVABFAAFAAAAAAAAAAAAAAAAAAAJA2A7A7A7A7A7A7A7A7A7A7A7A7A2A7A7A7A7A7A7A7A7A7A7A7A7A7A7A2CA7CA
在IIS管理面板中,可以转到身份验证,然后选择所需的身份验证。