我有一个连接的Socket,用于获取HTTP标头响应。如果我跳过身份验证,一切正常(除非页面需要身份验证)。但是,当我进入此代码时,它总是在AuthenticateAsClient行上抛出IOException。消息是:“无法从传输连接读取数据:连接已关闭”。我已经尝试过DefaultCredentials和DefaultNetworkCredentials。
关于我缺少什么的任何想法?是什么导致连接关闭?
感谢
if (Authenticate)
{
NetworkStream clientStream = new NetworkStream(webSocket, false);
NegotiateStream authStream = new NegotiateStream(clientStream);
NetworkCredential netcred = CredentialCache.DefaultNetworkCredentials;
try
{
authStream.AuthenticateAsClient(netcred,
String.Empty,
ProtectionLevel.None,
TokenImpersonationLevel.Identification);
if (!authStream.IsAuthenticated)
{
Console.WriteLine("Authentication failed");
ErrorText = "Authentication using default credentials failed";
return (HttpStatusCode)(-1);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
ErrorText = ex.Message;
return (HttpStatusCode)(-1);
}
}
答案 0 :(得分:0)
NegotiateStream
不执行HTTP身份验证:
在Windows 95/98系统上,Windows NT LAN Manager(NTLM)是用于身份验证的协议。在其他平台上,如果客户端和服务器都支持Kerberos协议,则使用Kerberos协议进行身份验证。否则使用NTLM。
查看提供WebClient和Credentials属性的ResponseHeaders类。